最开始的想法是创建vector<vector<string>> result,然后遍历strs中字符串,遍历result中vector,比较vector中第一个string和strs中string,若为字母异位词,则加入vector,若无,则创建新的vetcor加入result……
判断字母异位词的方法是建立长度为24,初始化全为0的string,每有一字母就将对应位置加一……(后来才发现有每个字母数量不能大于9的bug)
class Solution {
public:vector<vector<string>> groupAnagrams(vector<string>& strs) {vector<vector<string>> result;int n=strs.size();for(int i=0;i<n;i++){int m=result.size();int j=0;for(j;j<m;j++){vector<string> a=result[j];if(equal(a[0],strs[i])){result[j].push_back(strs[i]);break;}}if(j==m){vector<string> ss;ss.push_back(strs[i]);result.push_back(ss);}}return result;}bool equal(string s1,string s2){int n1=s1.size();int n2=s2.size();if(n1!=n2) return 0;string ss1(25,'0');for(int i=0;i<n1;i++){ss1[s1[i]-97]++;}string ss2(25,'0');for(int i=0;i<n2;i++){ss2[s2[i]-97]++;}if(ss1==ss2) return 1;else return 0;}
};
结果是时间超限,看了答案才知道有更好的方法,那就是用map,判断字母异位词也可以直接对string使用sort后进行比较,简洁很多
class Solution {
public:vector<vector<string>> groupAnagrams(vector<string>& strs) {unordered_map<string,vector<string>> mp;int n=strs.size();for(int i=0;i<n;i++){string str=strs[i];sort(str.begin(),str.end());mp[str].push_back(strs[i]);}vector<vector<string>> result;for(auto i=mp.begin();i!=mp.end();i++){result.push_back(i->second);}return result;}
};