leetcode 49 字母异位词分组
一、问题描述
二、解题思路
整体思路
可以采用哈希表来对异位词进行分组,最后将分组汇总到ret向量返回即可。
具体思路
(1)定义二维向量ret,ret中的元素为字符串数组,ret用于承接返回值;
(2)哈希表hash用于对异位词进行分组,hash的键为排序后的字符串,值为一个字符串数组;
(3)遍历字符串数组strs:
用字符串s承接strs中的字符串,对s进行排序,将排序后的s作为键,将对应的strs中的字符串加入hash[s]的值中,循环直到遍历完strs,遍历代码如下:
for(auto str:strs){
string s=str;
sort(s.begin(),s.end());
hash[s].push_back(str);
}
(4)遍历哈希表,将所有键对应的值(字符串向量)加入ret向量,返回ret,代码如下:
//将每个异词数组加入ret
for(auto [x,x1]:hash){
ret.push_back(x1);
}
return ret;
三、代码实现
时间复杂度:T(n)=O(n)
空间复杂度:S(n)=O(n)
class Solution {
public:vector<vector<string>> groupAnagrams(vector<string>& strs) {//哈希表vector<vector<string>> ret;unordered_map<string,vector<string>> hash;for(auto str:strs){string s=str;sort(s.begin(),s.end());hash[s].push_back(str);}//将每个异词数组加入retfor(auto [x,x1]:hash){ret.push_back(x1);}return ret;}
};