zoukankan      html  css  js  c++  java
  • 2Sigma OA prepare: Longest Chain

    DP use HashMap:

    根据string的长度sort,然后维护每个string的longest chain,default为1,如果删除某个char生成的string能提供更长的chain,则更新

     1 package twoSigma;
     2 
     3 import java.util.Arrays;
     4 import java.util.Comparator;
     5 import java.util.HashMap;
     6 import java.lang.StringBuilder;
     7 
     8 public class LongestChain {
     9     public int findLongestChain(String[] words) {
    10         if (words==null || words.length==0) return 0;
    11         int longestChain = 0;
    12         Arrays.sort(words, new Comparator<String>() {
    13             public int compare(String str1, String str2) {
    14                 return str1.length()-str2.length();
    15             }
    16         });
    17         HashMap<String, Integer> map = new HashMap<String, Integer>();
    18         for (String word : words) {
    19             if (map.containsKey(word)) continue;
    20             map.put(word, 1);
    21             for (int i=0; i<word.length(); i++) {
    22                 StringBuilder sb = new StringBuilder(word);
    23                 sb.deleteCharAt(i);
    24                 String after = sb.toString();
    25                 if (map.containsKey(after) && map.get(after)+1 > map.get(word)) {
    26                     map.put(word, map.get(after)+1);
    27                 }
    28             }
    29             if (map.get(word) > longestChain) longestChain = map.get(word);
    30         }
    31         return longestChain;
    32     }
    33 
    34     /**
    35      * @param args
    36      */
    37     public static void main(String[] args) {
    38         // TODO Auto-generated method stub
    39         LongestChain sol = new LongestChain();
    40         //String[] words = new String[]{"6", "a", "b", "ba", "bca", "bda", "bdca"};
    41         //String[] words = new String[]{"a", "a", "bc", "exf", "abc"};
    42         String[] words = new String[]{"bc", "abc"};
    43         int longestChain = sol.findLongestChain(words);
    44         System.out.println(longestChain);
    45     }
    46 
    47 }
  • 相关阅读:
    Linq聚合操作之Aggregate,Count,Sum,Distinct源码分析
    Linq分区操作之Skip,SkipWhile,Take,TakeWhile源码分析
    Linq生成操作之DefautIfEmpty,Empty,Range,Repeat源码分析
    Linq基础操作之Select,Where,OrderBy,ThenBy源码分析
    PAT 1152 Google Recruitment
    PAT 1092 To Buy or Not to Buy
    PAT 1081 Rational Sum
    PAT 1084 Broken Keyboard
    PAT 1077 Kuchiguse
    PAT 1073 Scientific Notation
  • 原文地址:https://www.cnblogs.com/EdwardLiu/p/6177843.html
Copyright © 2011-2022 走看看