49.字母异位词
由于互为字母异位词的两个字符串包含的字母相同,因此对两个字符串分别进行排序之后得到的字符串一定是相同的,故可以将排序之后的字符串作为哈希表的键。
- 遍历每一个字符串
- 对每一个字符串进行排序
- 比如 eat 排序为 aet,tea 排序为 aet
- 将字符串压在哈希表的键的最后位置
- 例如mp[aet].push_back(eat)和如mp[aet].push_back(tea)
- 当要输出mp[aet]时,输出 second 值 成员即可。例如:[eat,tea]。
- 然后用迭代器遍历哈希表,然后压到 ans 数组即可。
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].push_back(str);
}
vector<vector<string>> ans;
for(auto it = mp.begin(); it != mp.end(); ++it){
ans.push_back(it->second);
}
return ans;
}
};
时间复杂度:O(nklogk),其中 n 是 strs 中的字符串的数量,k 是 strs 中的字符串的的最大长度。
空间复杂度:O(nk)。