(LeetCode 面试经典 150 题) 49. 字母异位词分组 (哈希表)
题目:49. 字母异位词分组
思路:哈希表,时间复杂度0(n)。
对每个字符串排个序,同类的排序结果一致,用哈希表来存储即可。
C++版本:
class Solution {
public:vector<vector<string>> groupAnagrams(vector<string>& strs) {unordered_map<string,vector<string>> mp;for(auto x:strs){string t=x;sort(t.begin(),t.end());mp[t].push_back(x);}vector<vector<string>> v;for(auto x:mp){v.push_back(x.second);}return v;}
};
JAVA版本:
class Solution {public List<List<String>> groupAnagrams(String[] strs) {Map<String,List<String>> mp=new HashMap<>();for(var x:strs){char[] c=x.toCharArray();Arrays.sort(c);String s=new String(c);List<String> t=mp.getOrDefault(s,new ArrayList<>());t.add(x);mp.put(s,t );}return new ArrayList<List<String>>(mp.values());}
}
GO版本:
func groupAnagrams(strs []string) [][]string {mp:=make(map[string][]string)for _,x:=range strs {t:=strings.Split(x,"")sort.Strings(t)st:=strings.Join(t,"")mp[st]=append(mp[st],x)}ans:=make([][]string,0,len(mp))for _,x:= range mp {ans=append(ans,x)}return ans
}