T49. Group Anagrams【Medium】
題目
給出一組字符串粹舵,把 字母相同順序不同的詞 分成一類
例如,給出: ["eat", "tea", "tan", "ate", "nat", "bat"],
返回:
[
["ate", "eat","tea"],
["nat","tan"],
["bat"]
]
思路
這個代碼的解決方式真的超巧妙衩茸,贊一個!
① 通過 sort 方法把單詞中的字母排序,排好序字母相同的條件就解決了呀助泽!
② 用 Map 把排好序的字母作為鍵,把 List<String> 作為值,然后往里面加就好了
總的來說嗡贺,簡單巧妙隐解!
看代碼吧~
代碼
代碼取自 Top Solution,稍作注釋
public List<List<String>> groupAnagrams(String[] strs) {
//若輸入為空則直接返回
if (strs == null || strs.length == 0) return new ArrayList<List<String>>();
//用這樣的Map真的是超巧妙
Map<String, List<String>> map = new HashMap<String, List<String>>();
//排序
Arrays.sort(strs);
for (String s : strs) {
char[] ca = s.toCharArray();
//每個字母排序,使得這些相同字母順序不一樣的字符串變成一樣了
Arrays.sort(ca);
String keyStr = String.valueOf(ca);
//若沒有對應的鍵, 則添加一個
if (!map.containsKey(keyStr)) map.put(keyStr, new ArrayList<String>());
//保存到字母組成的鍵對應的 List 里面
map.get(keyStr).add(s);
}
return new ArrayList<List<String>>(map.values());
}