救救企鹅

救救企鹅

https://ac.nowcoder.com/acm/problem/20862

题目

给定一个文本串 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;
}
全部评论
可以问一下,为什么最后要反着来替换??
点赞 回复 分享
发布于 2020-09-07 21:39

相关推荐

10-14 13:25
已编辑
门头沟学院 C++
点赞 评论 收藏
分享
死在JAVA的王小美:哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈,我也是,让我免了一轮,但是硬气拒绝了
点赞 评论 收藏
分享
评论
1
收藏
分享
牛客网
牛客企业服务