分析:这道题如果按照 常规的思路几层for循环暴力求解会超时。这里我主要是利用将每个待处理的字符串排序后用哈希的思想将同构的字符串放在一起。
C++代码:
#include <iostream>
#include <algorithm>
#include <string>
#include <map>
#include <vector>
using namespace std;
class Solution {
public:
vector<vector<string>> groupAnagrams(vector<string>& strs) {
//res用来保存结果
vector<vector<string>> res;
//对每一个待处理的字符串排序,然后根据排序后的字符串找到该存放的位置,然后在sv中存入排序前的字符串
map<string, vector<string>> sv;
for (int i=0;i<strs.size();++i)
{
string sort_s = strs[i];
//排序
sort(sort_s.begin(), sort_s.end());
sv[sort_s].push_back(strs[i]);
}
for (map<string, vector<string>>::iterator it=sv.begin();it!=sv.end();++it)
{
res.push_back(it->second);
}
return res;
}
};
int main()
{
Solution s;
vector<string> v;
v.push_back("eat");
v.push_back("tea");
v.push_back("tan");
v.push_back("ate");
v.push_back("nat");
v.push_back("bat");
vector<vector<string>> res = s.groupAnagrams(v);
for (vector<vector<string>>::iterator ita = res.begin();ita!=res.end();++ita)
{
for (vector<string>::iterator itb = ita->begin();itb!=ita->end();++itb)
{
cout<<*itb<<'\t';
}
cout<<endl;
}
return 0;
}