反思:
1. c++ vector为空,size() - 1后溢出,注意排坑,vector.size()返回的是无符号整数,需要将它转换为int。
2.string是一个类,有自己的函数!!!,string.size() 和 string.length()无区别。
3.map.count(key)//返回的只有0和一
map.find(key)//返回的是迭代器。
给你一个字符串数组,请你将 字母异位词 组合在一起。可以按任意顺序返回结果列表。
字母异位词 是由重新排列源单词的所有字母得到的一个新单词。
示例 1:
输入: strs = ["eat", "tea", "tan", "ate", "nat", "bat"]
输出: [["bat"],["nat","tan"],["ate","eat","tea"]]
示例 2:输入: strs = [""]
输出: [[""]]
示例 3:输入: strs = ["a"]
输出: [["a"]]
提示:
1 <= strs.length <= 104
0 <= strs[i].length <= 100
strs[i] 仅包含小写字母
起初想使用map<String,int>,发现 vector<vector<string>>里面是空的,不能直接a[i].push_back()
改成vector<string>后可直接从map->second导入容器中。
class Solution {
public:
vector<vector<string>>a;
unordered_map<string,vector<string>>c;
vector<vector<string>> groupAnagrams(vector<string>& strs) {
for(string &str:strs){
string b=str;
sort(b.begin(),b.end());
c[b].emplace_back(str);
}
for(auto it=c.begin();it!=c.end();it++){
a.emplace_back(it->second);
}
return a;
}
};
时间复杂度:O(nklogk),其中 n是strs 中的字符串的数量,k是 strs 中的字符串的的最大长度。需要遍历 n 个字符串,对于每个字符串,需要 O(klogk) 的时间进行排序以及 O(1) 的时间更新哈希表,因此总时间复杂度是 O(nklogk)。
空间复杂度:O(nk),其中 n 是 strs 中的字符串的数量,k 是 strs 中的字符串的的最大长度。需要用哈希表存储全部字符串。
来源:力扣(LeetCode)
链接:https://leetcode.cn/problems/group-anagrams