Given an array of strings, group anagrams together.
- Example:
- Input: ["eat", "tea", "tan", "ate", "nat", "bat"],
- Output:
- [
- ["ate","eat","tea"],
- ["nat","tan"],
- ["bat"]
- ]
想法是.
把每个输入都排序, 如果是 anagram 则, 排序后应该一样.
这样想到了 用 Map, 然后 key 为排序后的 anagram,value 为 List《String》 可以把所有的 anagram 放到一块.
- private static final int INIT_SIZE= 16;
- public List<List<String>> groupAnagrams(String[] strs) {
- List<List<String>>result = new ArrayList<>();
- Map<String, List<String>>anagrams =new HashMap<>();
- for(String str:strs){
- String charsAfterSorted=sortTheString(str);
- if(anagrams.containsKey(charsAfterSorted)){
- List<String>anagram = anagrams.get(charsAfterSorted);
- anagram.add(str);
- }else{
- List<String>anagram = new ArrayList<>(INIT_SIZE);
- anagram.add(str);
- anagrams.put(charsAfterSorted, anagram);
- }
- }
- // anagrams.forEach((k,v)-> System.out.println("chars :"+k+"anagrams:"+v));
- anagrams.forEach((k,v)-> result.add(v));
- return result;
- }
- private String sortTheString (String str){
- char[]chars =str.toCharArray();
- Arrays.sort(chars);
- return new String(chars);
- }
来源: http://www.bubuko.com/infodetail-3452684.html