题目:
给一个字符串数组,将字母异位词组合在一起。可以按任意顺序返回结果列表。字母异位词是由重新排列源单词的所有字母得到的一个新单词。
#include<iostream>
#include<bits/stdc++.h>
using namespace std;
//给你一个字符串数组,请你将字母异位词组合在一起。可以按任意顺序返回结果列表。strs = ["eat", "tea", "tan", "ate", "nat", "bat"]
//leetcode提交版本
class Solution {
public:
vector<vector<string>> groupAnagrams(vector<string>& strs) {
unordered_map<string,vector<string>> m;
for(string& s : strs){
string val = s;
sort(s.begin(),s.end());
string key = s;
m[key].emplace_back(val);
}
vector<vector<string>> res;
for(auto iter = m.begin();iter != m.end();iter++){
res.push_back(iter -> second);
}
return res;
}
};
int main() {
//输入字符串数组。遍历他们每一个串,先把每一个串作为键,再排序,用map集合接受每一个串。for循环输出每一组字符串组
vector<string> initStrings;
int n;
cin>>n;
string s;
for(int i = 0;i < n;i++) {
cin >> s;
initStrings.push_back(s);
}
unordered_map<string,vector<string>> m;
for(string& s : initStrings){
string val = s;
sort(s.begin(),s.end());
string key = s;
m[key].emplace_back(val);
}
for(auto iter = m.begin();iter != m.end();iter++){
vector<string> v = iter -> second;
for(int i = 0;i < v.size();i++){
cout<<v[i]<<endl;
}
}
//下面是调用Solution的groupAnagrams方法
// Solution s;
// vector<string> strs = {"eat", "tea", "tan", "ate", "nat", "bat"};
// vector<vector<string>> v = s.groupAnagrams(strs);
// for(vector<string> vv : v) {
// for(string s : vv) {
// cout<<s<<endl;
// }
// }
return 0;
}