Censor

frog is now a editor to censor so-called sensitive words (敏感词).

She has a long text p

. Her job is relatively simple -- just to find the first occurence of sensitive word w

and remove it.

frog repeats over and over again. Help her do the tedious work.

Input

The input consists of multiple tests. For each test:

The first line contains 1

string w. The second line contains 1 string p

.

(1≤length of w,p≤5⋅106

, w,p

consists of only lowercase letter)

Output

For each test, write 1

string which denotes the censored text.

Sample Input

    abcaaabcbcbbbbabcab

Sample Output

    aab

题意: 给你一个主串,递归删除模式串。比如: T: abc  S: aaabcbc    aaabcbc->aabc->a

非常巧妙的KMP,我们用一个栈记录当前的字符以及其在模式串匹配的位置,当位置等于模式串长度之后,将模式串长度的串出栈,从栈顶元素开始继续匹配主串.时间复杂度 O(n).

#include <stdio.h>
#include <iostream>
#include <string.h>
#include <stack>
#include <algorithm>
using namespace std;
const int N = 5000005;
struct Node{char c;int k;
};
char w[N],t[N],ans[N];
int Next[N];
void get_next(char *p){int len = strlen(p);int i=0,k=-1;Next[0] = -1;while(i<len){if(k==-1||p[i]==p[k]){i++,k++;Next[i] = k;}else k = Next[k];}
}void Kmp(char *s,char *p){int len1 = strlen(s),len2 = strlen(p);int i=0,j=0,len;stack <Node> stk;while(!stk.empty()) stk.pop();while(i<len1){if(j==-1||s[i]==p[j]){i++,j++;stk.push(Node{s[i-1],j});}else {j=Next[j];}if(j==len2){len = len2;while(!stk.empty()&&len--) stk.pop();if(stk.empty()) j = 0;else j = stk.top().k;}}int k = 0;while(!stk.empty()){ans[k++] = stk.top().c;stk.pop();}for(int i=k-1;i>=0;i--) printf("%c",ans[i]);printf("\n");
}
int main(){while(scanf("%s%s",w,t)!=EOF){get_next(w);Kmp(t,w);}return 0;
}

 

转载于:https://www.cnblogs.com/liyinggang/p/7403537.html

SCU 4438:Censor相关推荐

  1. 【哈希-字符串匹配+模拟栈】SCU - 4438: Censor(哈希详解哈哈哈)

    写在前:由于哈希没有好好听讲,也没有下来看.这是排位我开的第一道题,直接string暴力T了.昨天其实就看了哈希,太浮躁,于是本来很简单的哈希愣是没看懂.(于是放弃去看爱5了23333333)今天补上 ...

  2. ACM: SCU 4438 Censor - KMP

    SCU 4438 Censor Time Limit:0MS     Memory Limit:0KB     64bit IO Format:%lld & %llu Practice Des ...

  3. SCU - 4438——Censor(哈希)

    题目链接:http://acm.scu.edu.cn/soj/problem.action?id=4438 题意:给出一个串a和串b,串b中如果有a串则删除,删除后b剩下的串再连到一起,再找串a,反复 ...

  4. SCU - 4438 Censor

    Censor frog is now a editor to censor so-called sensitive words (敏感词). She has a long text pp. Her j ...

  5. SCU - 4438 Censor

    Censor frog is now a editor to censor so-called sensitive words (敏感词). She has a long text p . Her j ...

  6. SCU - 4438 Censor (KMP)

    Censor frog is now a editor to censor so-called sensitive words (敏感词). She has a long text pp. Her j ...

  7. SCU 4438 Censor

    $KMP$,链表. 将$p$弄成链表,每次匹配到,删掉中间的,继续匹配. #include<bits/stdc++.h> using namespace std;const int INF ...

  8. SCU 4438 Censor (KMP)

    题目大意: 就是现在给出两个字符串A, B, 长度都不超过500万, 要求每次将B中第一次A的出现删除, 然后将B剩下的两段前后合并, 然后重复这个过程直到没有可以删除的A位置, 问最后剩下的串是什么 ...

  9. SCU 4438 Censor(Hash)题解

    题意:找出字符串p中的w串删除,反复操作,直到找不到w,输出这个串 思路:哈希处理前缀和,如果值相同就删掉. 代码: #include<iostream> #include<algo ...

最新文章

  1. python3.6与3.7有什么区别_Python3.6.6和Python3.7.0的坑
  2. iOS逆向之深入解析如何Hook所有+load方法及Category的处理
  3. 修改终端服务端口的方法
  4. 维基百科上—数据仓库、数据挖掘、OLAP三者之间的区别
  5. light task schedule的定时任务实现源码解析
  6. ssm-学子商城-项目第十二天
  7. 2019年终总结-坚持的力量
  8. 数据库不存在 php报错,如何实现“当名字在数据库中不存在时,转到错误页面。”?...
  9. Linux蓝牙鼠标自己断开,thinkpad蓝牙鼠标经常断线怎么办 thinkpad蓝牙鼠标频繁断开连接处理方法...
  10. P17安全领袖圆桌:安全市场迎来千亿发展机遇,腾讯携手产业链伙伴共建安全生态
  11. 计算机算东西,PCDN边缘计算是个啥东西
  12. 【TUG 话题探讨 005】TiDB 生态工具(DM、TiCDC等)使用场景及常见问题
  13. 12个优雅的 python 代码使用案例
  14. c语言期末总结1000,C语言期末总结.doc
  15. Solr--Solr与Spring整合(非完整版)
  16. python任务分配问题_【python3】任务分配问题
  17. 2020第二场NOIP|题解
  18. 服务器安装系统提示加载驱动程序,重新安装win7系统提示“加载驱动程序”解决方案...
  19. mysql漏洞攻击_MySQL曝中间人攻击Riddle漏洞可致用户名密码泄露的处理方法
  20. elasticsearch分布式搜索引擎详细使用总结

热门文章

  1. 小姐姐带你刷:Linux经典100题及参考答案
  2. Ant Design Pro V4 入门到实战手册【2020】
  3. C/C++族谱管理系统[铁木真家族]
  4. 设置的一级菜单图标添加背景
  5. MongoDB的日常维护管理
  6. 查理·芒格:让自己配得上想要的东西
  7. Tsai笔记:C++学习随性笔记(2)—— 数据结构:顺序表的基本操作
  8. 解决用户登录、注册传输中账号密码的安全泄露问题
  9. 【超哥原创分享】自定义实现日志输出,抛弃任何依赖包,日志输出随心走,弃繁就简,简而不凡
  10. 2022-2028全球与中国机器人型抛光机市场现状及未来发展趋势