哈希表2
早上刚好连续几题都是beat100%碰巧云顶之奕又更新了,想着打两把放松一下,结果打了一下午愣是没赢过,晚上刷leetcode,最后一题愣是没写出来,心态有点小崩
实际应用
字母异位词分组
给定一个字符串数组,将字母异位词组合在一起。可以按任意顺序返回结果列表。
字母异位词指字母相同,但排列不同的字符串。
class Solution {
public:
vector<vector<string>> groupAnagrams(vector<string>& strs) {
map<string,vector<string>> mp;
for(auto str:strs)//遍历字符串数组
{
string Oristr=str; //记录原始字符串
sort(str.begin(),str.end());//对字符串进行排序
mp[str].push_back(Oristr); //把原字符串加到异位词的键对应的数组后面
}
//遍历每个异位词对应的数组,加到结果数组里
vector<vector<string>> res;
map<string,vector<string>>::iterator it;
it=mp.begin();
while(it!=mp.end())
{
res.push_back(it->second);
it++;
}
return res;
}
};
移位字符串分组
给定一个字符串,对该字符串可以进行 “移位” 的操作,也就是将字符串中每个字母都变为其在字母表中后续的字母,比如:“abc” -> “bcd”。这样,我们可以持续进行 “移位” 操作,从而生成如下移位序列:
“abc” -> “bcd” -> … -> “xyz”
给定一个包含仅小写字母字符串的列表,将该列表中所有满足 “移位” 操作规律的组合进行分组并返回
作者:力扣 (LeetCode)
链接:https://leetcode-cn.com/leetbook/read/hash-table-plus/x7deic/
来源:力扣(LeetCode)
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
class Solution {
public:
vector<vector<string>> groupStrings(vector<string>& strings) {
map<string,vector<string>> mp;
for(int i=0;i<strings.size();i++)
{
//用以a开头的字符串作为键,也就是所有字符串的键值都是每个字符原值减去第一个字符和a的插值
//bcd中,b和a的差值是1,那就让整个字符串每个字符依次减去1得到abc
string key="";
int dis=strings[i][0]-'a';
for(int j=0;j<strings[i].size();j++)
{
key.push_back((strings[i][j]-dis+26)%26);//当超过z或者小于a时,取模处理防止越界
}
//然后再把相同的键值的字符串添加进哈希表对应的数组中
mp[key].push_back(strings[i]);
}
vector<vector<string>> res;
map<string,vector<string>>::iterator it;
it=mp.begin();
while(it!=mp.end())
{
res.push_back(it->second);
it++;
}
return res;
}
};
<