Anagrams

思路:
方法一:
建一个hashtable, HashMap<String, List<String>>。逐个扫描strs,然后sort, 思路显而易见。
时间复杂度是O(nklogk)。k: length of longest string in strs.
方法二:
把string 转化成int[26], 记录每一个字符的个数:count[c - 'a']。然后再把count[26]转化成统一格式的string: "#0#0#0#0....."  #eachcount,一个26个。目的和sort一样的,如果是anagram转化完成后会相等,只不过时间复杂度变成了O(nk)。

代码如下:

 public class Solution {  
   /*  
    * @param strs: A list of strings  
    * @return: A list of strings  
    */  
   public List<String> anagrams(String[] strs) {  
     // write your code here  
     List<String> res = new ArrayList<>();  
     if(strs.length == 0|| strs == null) {  
       return res;  
     }  
     Map<String, ArrayList<String>> map = new HashMap<>();  
     int[] count = new int[26];  
     for(String s: strs) {  
       Arrays.fill(count, 0);  
       for(char c: s.toCharArray()) {  
         count[c - 'a']++;  
       }  
       StringBuilder sb = new StringBuilder("");  
       for(int i = 0; i < 26; i++) {  
         sb.append("#" + count[i]);  
       }  
       String key = sb.toString();  
       if(!map.containsKey(key)) {  
         map.put(key, new ArrayList<String>());  
       }   
       map.get(key).add(s);  
     }  
     for(String key: map.keySet()) {  
       if(map.get(key).size() > 1) {  
         res.addAll(map.get(key));  
       }  
     }  
     return res;  
   }  
 }  
要注意hashmap的一些基本操作,例如获取所有的key:public Set<K> keySet()
. 获取所有的value: public Collection<V> values()

评论

此博客中的热门博文

776. Split BST

663. Equal Tree Partition

532. K-diff Pairs in an Array