【Leetcode】Group Anagrams

题目链接:https://leetcode.com/problems/anagrams/

题目:

Given an array of strings, group anagrams together.

For example, given: ["eat", "tea", "tan", "ate", "nat", "bat"]
Return:

[
  ["ate", "eat","tea"],
  ["nat","tan"],
  ["bat"]
]

Note:

  1. For the return value, each inner list's elements must follow the lexicographic order.
  2. All inputs will be in lower-case.
思路:
将每个字符串的字符排序,将排序后的相同字符串保存在map中,最后要对结果字典序排序。

算法:
[java]  view plain  copy
 
  1. public List<List<String>> groupAnagrams(String[] strs) {  
  2.     List<List<String>> strss = new ArrayList<List<String>>();  
  3.     HashMap<String, List<String>> maps = new HashMap<String, List<String>>();  
  4.     for (String s : strs) { // 字符串内排序,并保存对应关系  
  5.         char c[] = s.toCharArray();  
  6.         Arrays.sort(c);  
  7.         if (!maps.containsKey(String.valueOf(c))) {  
  8.             List<String> l = new ArrayList<String>();  
  9.             l.add(s);  
  10.             maps.put(String.valueOf(c), l);  
  11.         } else {  
  12.             List<String> l = maps.get(String.valueOf(c));  
  13.             l.add(s);  
  14.             maps.put(String.valueOf(c), l);  
  15.         }  
  16.     }  
  17.     Iterator<String> set = maps.keySet().iterator();  
  18.     while (set.hasNext()) {  
  19.         List<String> l = maps.get(set.next());  
  20.         Collections.sort(l); // 因为要求list内部字符串要字典序,所以对list进行排序,可以用collections对list排序  
  21.         strss.add(l);  
  22.     }  
  23.     return strss;  
  24. }  


你可能感兴趣的:(【Leetcode】Group Anagrams)