题干:
给你一个字符串数组,请你将 字母异位词 组合在一起。可以按任意顺序返回结果列表。
示例 1:
输入: strs = ["eat", "tea", "tan", "ate", "nat", "bat"]
输出: [["bat"],["nat","tan"],["ate","eat","tea"]]
解释:
- 在 strs 中没有字符串可以通过重新排列来形成
"bat"。 - 字符串
"nat"和"tan"是字母异位词,因为它们可以重新排列以形成彼此。 - 字符串
"ate","eat"和"tea"是字母异位词,因为它们可以重新排列以形成彼此。
示例 2:
输入: strs = [""]
输出: [[""]]
示例 3:
输入: strs = ["a"]
输出: [["a"]]
提示:
1 <= strs.length <= 1040 <= strs[i].length <= 100strs[i]仅包含小写字母
解题思路:
依旧使用哈希表,这个时候可以找到共同点,就是组成单词的字母是一样的,据此可以进行排序,将排序得到的字符串作为哈希表的键,字符串数组作为哈希表的值,并将原字符串插入到字符串数组后面,打印即可。
AC代码
#include <bits/stdc++.h>
using namespace std;
int main(){
vector<string> a;
unordered_map<string, vector<string>> b;
string line;
getline(cin, line);
istringstream iss(line);
string temp;
while(iss>>temp){
a.emplace_back(temp);
}
for(string&p: a){
string key = p;
sort(key.begin(), key.end());
b[key].emplace_back(p);
}
auto it = b.begin();
while(it!=b.end()){
for (int i = 0;i<it->second.size();i++){
cout << it->second[i] << ' ';
}
cout << endl;
it++;
}
}
734

被折叠的 条评论
为什么被折叠?



