49 字母异位词分组
利用哈希表,每个字母进行排序
class Solution {
public:
vector<vector<string>> groupAnagrams(vector<string>& strs) {
unordered_map<string, vector<string>> mp;
for(string str : strs){
string key = str;
sort(key.begin(), key.end());
mp[key].emplace_back(str);
}
vector<vector<string>> res;
for(auto it = mp.begin(); it != mp.end(); it++){
res.emplace_back(it->second);
}
return res;
}
};
时间复杂度O(Nklogk),N是str中字符串的数量,k是字符串中最大的字符长度。对于N个字符串都要遍历,其中每个字符串排序的时间复杂度是O(KlogK).
空间复杂度是O(NK),srt中的每个字符串都需要存储
451根据字符出现频率排序
首先用哈希表存储各个字符对应出现的次数,然后用桶排序,索引i存储的就是出现i次的字符
时间复杂度和空间复杂度都是O(N)
class Solution {
public:
string frequencySort(string s) {
unordered_map<char, int> mp;
int max = INT_MIN;
for(char c : s){
mp[c]++;
if(mp[c] > max) max = mp[c];
}
vector<list<char>> tom(max + 1);
for(auto it = mp.begin(); it != mp.end(); it++){
tom[it->second].emplace_back(it->first);
}
string res;
for(int i = max; i > 0; i--){
for(auto j = tom[i].begin(); j != tom[i].end(); j++){
int num = i;
while(num){
res += *j;
num--;
}
}
}
return res;
}
};