leetcode-anagrams
// leetcode 49: 將由相同字母組成的字符串進行分類
// 解題思路:將字符串進行排序,排序完一樣的字符串歸爲一類
// 使用map來對字符串進行歸類,最後轉換爲vector二維數組
// 本題不要求最後輸出的順序
#include <iostream>
#include <vector>
#include <string>
#include <unordered_map>
using namespace std;
string sortStr(string str) {
// 注意初始化
int count[26] = { 0 };
int n = str.size();
for (int i = 0; i < n;++i) {
count[str[i] - 'a']++;
}
string res = "";
for (int i = 0; i < 26; ++i) {
res += string(count[i], i + 'a');
}
return res;
}
vector<vector<string>> groupAnagrams(vector<string>& strs) {
vector<vector<string>> result;
unordered_map<string, vector<string>> dataset;
int n = strs.size();
for (int i = 0; i < n; ++i) {
dataset[sortStr(strs[i])].push_back(strs[i]);
}
for (auto data : dataset) {
result.push_back(data.second);
}
return result;
}
int main() {
vector<string> data;
int n;
cin >> n;
string str;
for (int i = 0; i < n; ++i) {
cin >> str;
data.push_back(str);
}
vector<vector<string>> res = groupAnagrams(data);
int len1 = res.size();
for (int i = 0; i < len1; ++i) {
for (int j = 0; j < res[i].size(); ++j) {
cout << res[i][j] << " ";
}
cout << endl;
}
return 0;
}