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

She has a long text pp. Her job is relatively simple – just to find the first occurence of sensitive word ww 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 11 string ww. The second line contains 11 string pp.

(1≤length of w,p≤5⋅1061≤length of w,p≤5⋅106, w,pw,p consists of only lowercase letter)

Output
For each test, write 11 string which denotes the censored text.

Sample Input
abc
aaabcbc
b
bbb
abc
ab
Sample Output
a

ab

没想到啊,还是对KMP算法不太了解,用数组模拟栈,匹配完后,用下标index -= m,相当于就删去了,和之前的合并,用一个数组记录一下之前每个index分别对应敏感词的哪个,删去之后,将敏感词下标 j = tmp[index],就从合并过去了;结合代码理解一下

#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<cmath>
using namespace std;
typedef long long LL;
const int inf = 0x3f3f3f3f;
#define mp make_pair
#define pb push_back
#define fi first
#define se second
const int MAXN = 5e6 + 5;
int Next[MAXN],tmp[MAXN];void getNext(char s[])
{memset(Next,-1,sizeof(Next));int i,j;int n = strlen(s);j = -1;for(i = 0;i < n - 1;++i){//i,j都表示当前已经匹配过的字符,而j+1与i+1是未匹配过的字符while(j >= 0 && s[j+1] != s[i+1]){j = Next[j];}//跳出循环有两种情况,回溯到s[0]也没匹配到,或者未到达s[0]是匹配到了if(s[j+1] == s[i+1]) j++;//再次确认上面跳出循环的情况,并对j进行操作。Next[i+1] = j;}
}char st[MAXN];
//s1是主串,s2是匹配串
int Search(char s1[],char s2[])
{getNext(s2);int i;int n = strlen(s1);int m = strlen(s2);int j = -1;int index = 0;//i代表在s1里的下标,j代表s2里的下标for(i = 0;i < n;++i){st[index++] = s1[i];  //存储匹配失败的字符串,通过后面index -= m来进行删除操作while(j >= 0 && s1[i] != s2[j + 1]){j = Next[j];}//跳出循环有两种情况:要从头匹配或者是匹配到了if(s1[i] == s2[j + 1])j++;tmp[index] = j; //记录当前index所匹配到的敏感词的下标,完成删除后的合并操作//匹配到了,j后移if(j == m - 1){index -= m;j = tmp[index];}}return index;
}char str1[MAXN],str2[MAXN];int main()
{while(~scanf("%s%s",str1,str2)){st[Search(str2,str1)] = '\0';printf("%s\n",st);}return 0;
}

Censor KMP算法相关推荐

  1. C - Censor KMP算法

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

  2. SCU4438 Censor(审查员) (KMP算法与模拟栈的应用 || HASH表与模拟栈的结合)

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

  3. ACM: SCU 4438 Censor - KMP

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

  4. BF算法优化-------KMP算法

    百度百科:KMP算法是一种改进的字符串匹配算法,由D.E.Knuth,J.H.Morris和V.R.Pratt提出的,因此人们称它为克努特-莫里斯-普拉特操作(简称KMP算法).KMP算法的核心是利用 ...

  5. 数据结构与算法(5)字符串(BF算法、KMP算法及KMP算法优化)

    目录 一.BF算法(暴力算法) 二.KMP算法 三.KMP算法优化 一.BF算法(暴力算法) 一个一个往后匹配,匹配失败继续从母串下一个和头(子串的头)往后继续匹配. 虽然简单,但是需要较多的时间复杂 ...

  6. hiho 1015 KMP算法 CF 625 B. War of the Corporations

    #1015 : KMP算法 时间限制:1000ms 单点时限:1000ms 内存限制:256MB 描述 小Hi和小Ho是一对好朋友,出生在信息化社会的他们对编程产生了莫大的兴趣,他们约定好互相帮助,在 ...

  7. HDU 1711 Number Sequence(KMP算法)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1711 Number Sequence Time Limit: 10000/5000 MS (Java/ ...

  8. 算法(2)KMP算法

    1.0 问题描述 实现KMP算法查找字符串. 2.0 问题分析 "KMP算法"是对字符串查找"简单算法"的优化. 字符串查找"简单算法"是源 ...

  9. KMP算法求回溯数组的步骤

    KMP算法到底是什么原理就不说了,各种资料上讲的明明白白,下面我就如何用代码来实现做一下说明和记录. KMP的核心思想就是,主串不回溯,只模式串回溯.而模式串匹配到第几位时失配,要回溯多少,由模式串本 ...

最新文章

  1. OpenCV学习(12) 图像的腐蚀与膨胀(3)
  2. 大型门户网站的可伸缩性架构设计
  3. hibernate -- hello world
  4. Python笔记-利用OpenCV的matchTemplate屏幕找图并使用pyautogui点击
  5. 对等通信_新的通信技术如何影响对等参与
  6. vue+node+mongodb实现的功能
  7. 4.二叉搜索树转为有序双向链表(递归算法与非递归算法)
  8. python协同过滤算法_协同过滤算法介绍及算法实现
  9. Android9.0 setStereoVolume左右声道流程(二十四)
  10. 深入TextCNN(一)详述CNN及TextCNN原理
  11. 2016 ACM/ICPC 沈阳站 小结
  12. 建立域信任关系后,查找位置中看不到另一个域的信息
  13. lumion基础操作(一)
  14. 本地打印后台处理程序服务没有运行和windows无法连接到打印机拒绝访问
  15. 人性:《少年pi的奇幻漂流》和《一九四二》连看小感
  16. 计算机中丢失granny2,修复granny2.dll
  17. 【C语言】0x1F<<11等于0还是0xF800 ?
  18. 汉画轩国学传承国学精髓 解惑修身之道
  19. Win10使用Lenovo Vantage更新驱动后蓝屏,提示system_service_exception ETD.sys如何解决
  20. Mendix开发介绍实用篇(一)

热门文章

  1. 拓嘉辰丰:拼多多开店存在虚假交易的影响
  2. Spring-ICE 结冰算法述评-(5)对流换热系数计算
  3. python调用浏览器
  4. 如何更改手机Android版本,安卓手机怎么刷机 教你刷成其他版本系统【详细介绍】...
  5. 有序分类logistic回归-R语言
  6. 判断一个整数是否为质数/素数
  7. HTML语义化标签:
  8. php写字板代码,JS+HTML5 Canvas实现简单的写字板功能示例
  9. 安卓运行Linux游戏,电脑玩游戏:麒麟安卓Kydroid发布beta版
  10. QQ欢乐斗地主的心得体会