1. 程式人生 > 其它 >力扣 49. 字母異位詞分組

力扣 49. 字母異位詞分組

技術標籤:字串資料結構雜湊

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()); } }