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); }
原文:https://www.cnblogs.com/tangdatou/p/12443832.html