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

目录

题目:

示例:

分析:

代码:


题目:

【力扣每日一题】2023.8.15 字符中的查找与替换_第1张图片

示例:

【力扣每日一题】2023.8.15 字符中的查找与替换_第2张图片

分析:

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

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

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

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

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

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

代码:

class Solution {
public:
    string findReplaceString(string s, vector& indices, vector& sources, vector& targets) {
        int k=indices.size();
        map>m;   //按照默认升序存放索引,目标字符串,替换字符串
        for(int i=0;ifirst,i->second[0].size())==i->second[0]){   
                //先删除原先目标字符串
                s.erase(i->first,i->second[0].size());
                //再插入替换字符串
                s.insert(i->first,i->second[1]);
            }
        }
        return s;
    }
};

你可能感兴趣的:(力扣每日一题,leetcode,算法,c++,数据结构)