Censoring

Censoring

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

分析

有一道加强版的题解 这里 。那道题要求有多个模板串。而这道题只有一个,那么我们可以通过 来解决。考虑用栈储存路径,遇到完美匹配就返回 步。时间复杂度为

代码

#include<bits/stdc++.h>
using namespace std;
const int N = 1e6 + 10;
char ch[N],S[N],ans[N];
int top = 0,nxt[N],f[N];
int main() {
    scanf("%s%s",ch + 1,S + 1);
    int n = strlen(S + 1);
    for(int i = 2,j = 0;i <= n;i++) {
        while(S[i] != S[j + 1] && j) j = nxt[j];
        if(S[i] == S[j + 1]) j++;
        nxt[i] = j;
    }
    int m = strlen(ch + 1);
    for(int i = 1,j = 0;i <= m;i++) {
        while(ch[i] != S[j + 1] && j) j = nxt[j];
        if(ch[i] == S[j + 1]) j++;
        ans[++top] = ch[i];
        f[top] = j;
        if(j == n) {top -= n;j = f[top];} 
    }
    for(int i = 1;i <= top;i++) printf("%c",ans[i]);
    printf("\n");
    return 0;
}
全部评论

相关推荐

徐新高:号已经废了 建议重开一个账号投简历
点赞 评论 收藏
分享
2024-12-29 19:48
河北科技大学 Java
我真的会练有氧:1.如果没有实习经验,项目一个太少了 2.项目的需求描述不要写成用xxx实现了xxx。写明具体的需求功能就可以,除非是你想特别突出让面试官问的问题 3.证书就一个4级没必要摆上去,摆上去显得你就只有一个4级 4.技术栈太少了,且比较简略,可以加点分布式,常用的微服务组件,架构设计等等信息 个人意见,不喜勿喷
点赞 评论 收藏
分享
评论
5
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务