力扣 49. 字母異位詞分組
阿新 • • 發佈:2020-12-15
49. 字母異位詞分組
給定一個字串陣列,將字母異位詞組合在一起。字母異位詞指字母相同,但排列不同的字串。
由於互為字母異位詞的兩個字串包含的字母相同,因此兩個字串中的相同字母出現的次數一定是相同的,故可以將每個字母出現的次數使用字串表示,作為雜湊表的鍵。
由於字串只包含小寫字母,因此對於每個字串,可以使用長度為 2626 的陣列記錄每個字母出現的次數。需要注意的是,在使用陣列作為雜湊表的鍵時,不同語言的支援程度不同,因此不同語言的實現方式也不同。
class Solution {
public List<List<String> > groupAnagrams(String[] strs) {
Map<String, List<String>> map = new HashMap<String, List<String>>();
for (String str : strs) {
int[] counts = new int[26];
int length = str.length();
for (int i = 0; i < length; i++) {
counts[ str.charAt(i) - 'a']++;
}
// 將每個出現次數大於 0 的字母和出現次數按順序拼接成字串,作為雜湊表的鍵
StringBuffer sb = new StringBuffer();
for (int i = 0; i < 26; i++) {
if (counts[i] != 0) {
sb.append((char) ('a' + i));
sb.append(counts[ i]);
}
}
String key = sb.toString();
List<String> list = map.getOrDefault(key, new ArrayList<String>());
list.add(str);
map.put(key, list);
}
return new ArrayList<List<String>>(map.values());
}
}