题目

给定一个文本串 s,再给两个串 a、b,文本串中的 a 都转换成 b,转换后的字符不再参与转换,输出最终的文本串。

解题思路

先在文本串 s 中寻找子串 a,记录下标。
然后,从右向左将文本串 s 中的子串 a 替换成 b。

C++代码

#include<iostream>
#include<vector>
using namespace std;

int main(){
    string s, a, b;
    cin >> s >> a >> b;
    vector<int> indices;
    int m = a.size();
    int start = 0;
    int k = 0;
    for(int i=0; i<s.size(); ++i){
        if(s[i]==a[k]){
            ++k;
            if(k==m){
                indices.push_back(start);
                k = 0;
                start = i+1;
            }
        }
        else{
            i = start;
            ++start;
            k = 0;
        }
    }
    for(int i=indices.size()-1; i>=0; --i){
        s.replace(indices[i],m,b);
    }
    cout << s << endl;
    return 0;
}