• 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 }
  • 相关阅读:
    leetcode 之 Palindrome Partitioning
    虚拟机共享文件夹下tar
    leetcode 之 Excel Sheet Column Number
    AndroidHttpClient & jsoup 解析 正方教务系统
    查看android下的分区表
    ubuntukylin 下编译 android4.4
    android:layout_weight 和 android: weightSum的使用
    Intent 与Bundle的传值关系
    使用自定义的Toast
    SlideMenu例子解析2
  • 原文地址:https://www.cnblogs.com/EdwardLiu/p/6177843.html
Copyright © 2020-2023  润新知