【力扣每日一题】2023.8.15 字符中的查找与替换

目录

题目:

示例:

分析:

代码:


题目:

示例:

分析:

题目很长,简而言之就是检查字符串中对应索引的位置是否有特定的字符串,如果有,那么替换,返回替换后的字符串。

这道题还算是没有刁难我们了,连可能要替换的索引都告诉我们了。

那么我们直接遍历每个下标,查询该位置的子串是否是特定的字符串,如果是,那么就删除特定字符串,再把要替换的字符串插入进去。

不过这样就有一个问题,那就是删除的字符串和替换的字符串长度不一定一致,那么我们这么一操作,就会导致下标错位。

那我们应该怎么做呢,如果我们从较后面的下标开始替换,那么替换后也不会影响在较前面的下标了,所以我们可以从后面的下标开始往前替换。

我们可以利用map按照键默认升序的特性,以下标为键,以对应位置的特定字符串和替换字符串为键。接着反着遍历map,去检查每个下标的位置是否有特定字符串,有则替换。

代码:

class Solution {
public:
    string findReplaceString(string s, vector<int>& indices, vector<string>& sources, vector<string>& targets) {
        int k=indices.size();
        map<int,vector<string>>m;   //按照默认升序存放索引,目标字符串,替换字符串
        for(int i=0;i<k;i++) m[indices[i]]={sources[i],targets[i]}; 
        //从右开始,这样键值就会是降序的,替换字符串后,接下来的下标不被影响
        for(auto i=m.rbegin();i!=m.rend();i++){ 
            //如果对应索引位置是目标字符串,那么替换  
            if(s.substr(i->first,i->second[0].size())==i->second[0]){   
                //先删除原先目标字符串
                s.erase(i->first,i->second[0].size());
                //再插入替换字符串
                s.insert(i->first,i->second[1]);
            }
        }
        return s;
    }
};

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值