题目
思路
废话
- 又是刚开始没想到,看了官网思路,再回头敲…
异位词=>字母相同,排列不同
则,对字符串进行排序后都是相同的
- 遍历字符串数组中的每个字符串str
- 取key=str,对每个字符串key进行排序
- 建map,其键就是排序后的key,其值就是具有相同key的str字符串数组
代码
#include<iostream>
#include<vector>
#include<unordered_map>
#include<algorithm>
using namespace std;
vector<vector<string>> groupAnagrams(vector<string>& strs) {
vector<vector<string>> ret;
unordered_map<string, vector<string>> strmap;
for(string str:strs){
string key=str;
sort(key.begin(),key.end());
strmap[key].emplace_back(str);
}
for(auto it=strmap.begin();it!=strmap.end();++it){
ret.emplace_back(it->second);
}
return ret;
}
int main(){
int n;
cin>>n;//输入的字符串的数量
vector<string> strs(n);
for(int i=0;i<n;i++) cin>>strs[i];
vector<vector<string>> ret=groupAnagrams(strs);
for(int i=0;i<ret.size();i++){
for(int j=0;j<ret[i].size();j++){
cout<<ret[i][j]<<" ";
}
cout<<endl;
}
return 0;
}