题目内容
给定一个字符串数组,将字母异位词组合在一起。字母异位词指字母相同,但排列不同的字符串。
示例:
输入: ["eat", "tea", "tan", "ate", "nat", "bat"]
输出:
[
["ate","eat","tea"],
["nat","tan"],
["bat"]
]
解题思路
我的解法是使用辅助hashtable对单词字母进行记录与对比。
使用hashmap可能会好一点,不过我没时间重写。
解题代码
class Solution {
public:
vector<vector<string>> groupAnagrams(vector<string>& strs) {
vector<vector<string>> ans;
vector<vector<int>> has;
int i=0;
while(i<strs.size())
{
if(i==0)
{
vector<string> t;
t.push_back(strs[i]);
ans.push_back(t);
has.push_back(createH(strs[i]));
}
else
{
int j=0;
vector<int> m;
m=createH(strs[i]);
while(j<ans.size())
{
int k=0;
while(k<26)
{
if(m[k]!=has[j][k])break;k++;
}
if(k==26){ans[j].push_back(strs[i]);break;}
else j++;
}
if(j==ans.size()){
vector<string> t;
t.push_back(strs[i]);
ans.push_back(t);
has.push_back(m);
}
}
i++;
}
return ans;
}
vector<int>createH(string &str)
{
vector<int> res(26);
int i=0;
while(i<str.size())
{
res[str[i]-'a']++;
i++;
}
return res;
}
};