说白了就是把字母一样的分到一组,他们的顺序不一样。问题来了如何找到字母都一样的串呢,很巧妙的一点就是将他们按照字典序排序,如果字母一样的话,他们排序之后就是相同的,就可以加入一组了。还是遍历一遍vector就可以得到结果,复杂度是on的。这里需要将排序后一样的装入同一组,所以还是用哈希表这样定义vector<string,vector<string>>m,将排序后的串为key,value就是字符串数组。
class Solution {
public:
vector<vector<string>> groupAnagrams(vector<string>& strs) {
unordered_map<string,vector<string>>m;
for(string &s:strs)
{
string temp=s;
sort(temp.begin(),temp.end());
m[temp].push_back(s);
}//将所有排序相同的字符串都装入同一组
vector<vector<string>>ans;
for(auto &it:m)
{
ans.push_back(it.second);
}
return ans;
}
};
本题关键在于想到给字符串排序后他们是相同的。
140

被折叠的 条评论
为什么被折叠?



