【Leetcode】49. Group Anagrams

題目地址:

https://leetcode.com/problems/group-anagrams/

給定一個字符串數組,如果兩個字符串所含字母以及每個字母出現的次數相同,則視爲等價。要求返回所有等價類。

思路是將等價的字符串統一化爲一個代表元作爲哈希表的key,然後將等價的元素都放在key對應的value裏,最後再歸結返回。代碼如下:

import java.util.*;

public class Solution {
    public List<List<String>> groupAnagrams(String[] strs) {
        List<List<String>> res = new ArrayList<>();
    
        Map<String, List<String>> map = new HashMap<>();
    
        for (String s : strs) {
            char[] chars = s.toCharArray();
            // 字符排序後的字符串就成了每個等價類的代表元
            Arrays.sort(chars);
            String cur = new String(chars);
            map.putIfAbsent(cur, new ArrayList<>());
            map.get(cur).add(s);
        }
    
        for (List<String> list : map.values()) {
            res.add(list);
        }
        
        return res;
    }
}

時間複雜度O(nllogl)O(nl\log l)

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章