题目: biubiu
题意:给一个字符串数组,然后找出字母个数相同的字符串。
字母个数相同可以对字符串进行排序然后比较判断,但是暴力就需要两层循环O(n^2),时间超限
代码展示:
class Solution {
public:
vector<vector<string>> groupAnagrams(vector<string>& strs) {
vector<vector<string>>ans;
vector<string>ans1;
int len=strs.size();
if(len==0){
return ans;
}
vector<int>p(len+1,0);
for(int i=0;i<len;i++){
if(p[i])
continue;
p[i]=1;
string s1,s2;
ans1.clear();
s1=strs[i];
ans1.push_back(s1);
sort(s1.begin(),s1.end());
for(int j=i+1;j<len;j++){
s2=strs[j];
sort(s2.begin(),s2.end());
if(s1==s2){
p[j]=1;
ans1.push_back(strs[j]);
}
}
ans.push_back(ans1);
}
return ans;
}
};
如果使用map,将排序后的字符串作为键,这样就只需要遍历一遍,时间复杂度为O(n),对于遍历寻找相同数据项,就可以使用map,这是一种思路
代码:
class Solution {
public:
vector<vector<string>> groupAnagrams(vector<string>& strs) {
vector<vector<string>>ans;
map<string,vector<string>>mp;
for(int i=0;i<strs.size();i++){
string s=strs[i];
sort(s.begin(),s.end());
mp[s].push_back(strs[i]);
}
for (auto it = mp.begin(); it != mp.end(); ++it) {
ans.push_back(it->second);
}
return ans;
}
};