力扣49. 字母异位词分组(哈希表)
思路
开始读题,要求我们寻找字母异位的相同字符串,简单来说就是有相同字母的字符串,那么就非常简单,这个题难点在于,存储数据。按照题目的特性,我们运用哈希表来存储有相同字母的字符串。
我们选择map容器,map有键值两个属性,那么我们的键需要存什么,根据题目要求我们找相同字母的字符串。他们有什么特点呢,1.排序后顺序相同,有相同的字母。那么我们就有两个突破口。
1.排序后字符串相同,那么就可以作为我们的键来使用。
对于值,我们要求的是存字符串的数组,利用vector
建立map容器 map<string,vector<string>> mp;
代码步骤
对于每个字符串我们需要先排序
string x=strs[i];
sort(x.begin(),x.end());
然后存到哈希表里面去
mp[x].emplace_back(strs[i]);
代码展示
map容器可以换成unordered_map无序哈希
unordered_map<string, vector<string>> mp;
class Solution {
public:vector<vector<string>> groupAnagrams(vector<string>& strs) {vector<vector<string>> num;map<string,vector<string>> mp;for(int i=0;i<strs.size();i++){string ss=strs[i];sort(ss.begin(),ss.end());mp[ss].emplace_back(strs[i]);}//两种写法第一个是迭代器,指针写法,第二个是c++11特性。auto 代表任意数据类型// for(auto it=mp.begin();it!=mp.end();++it)// {// num.emplace_back(it->second);// }//遍历容器存放字符串数组for(auto x:mp){num.emplace_back(x.second);}return num;}
};