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 }

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM