leetcode刷题笔记_哈希表2

哈希表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;

    }
};
<
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值