力扣49. 字母异位词分组 C++ (计数/排序)
法一:计数
思路:
统计每个字符串中不同字符出现的个数,将情况相同的字符串存在同一个哈希表中。
代码实现:
public:vector<vector<string>> groupAnagrams(vector<string>& strs) {vector<vector<string>>res;unordered_map<string,vector<string>>mp;for(auto &str : strs){//遍历字符串数组的每个字符串strstring s=string(26,'0');//新建字符串sfor(auto &c:str){//用s记录str的各字符个数s[c-'a']++; }mp[s].push_back(str);//以s为键,存异位词组}for(auto &c:mp){//res.push_back(c.second);}return res;}
};
注://使用引用&可以更改字符的值,值不改变时可不加(题中)。
法二:排序
思路:
由于互为变位词的两个字符串包含的字母相同,因此对两个字符串分别进行排序之后得到的字符串一定是相同的,故可以将排序之后的字符串作为哈希表的键。
代码实现:
class Solution {
public:vector<vector<string>> groupAnagrams(vector<string>& strs) {unordered_map<string,vector<string> >map;//键为字符串,值为其多个字母异位词for(string &s:strs){string t=s;sort(t.begin(),t.end());map[t].push_back(s);}vector<vector<string>>res;for(auto n:map){res.push_back(n.second);}return res;}
};
本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!
