题目来源:

https://vjudge.net/contest/297070#problem/C

http://acm.scu.edu.cn/soj/problem.action?id=4438

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

aab

题意:给一个模式串和一个主串,要求从主串中删除第一个模式串,然后拼接,继续删除直到不能删除输出最后的串

比赛时候我上去就用了java但是tl(题目没给出时间空间限制)后来队友用的队列,个人感觉实现不了,最终还是没能实现,这时候我想到了KMP算法于是花了一个多小时开始琢磨板子,理解了一点改了一下,感觉没有一点问题,队友给了我半个小时,我打完之后过不了样例,我就好慌,,,赛后一看找到一个网上的ac代码和我思路一样,都是用到KMP算法思想,我一看,发现我主串和模式串好多地方搞混了QAQ...

思路:用一个数组pre记录主串中当前所指字符与模式串相匹配字符的长度。KMP思想,当主串中出现完整的模式串时,j跳到模式串pre[k-len1]的位置接着与主串i所指的下一个字符比较

参考代码:

#include<iostream>
#include<cstring>
#include<string>
#include<cstdio>
using namespace std;
const int N=5e6+5;
char s1[N],s2[N],ans[N];
int pre[N],len1,len2,Next[N];
using namespace std;
void pre_kmp()
{int i=0,j=-1;Next[0]=-1;while(i<len1){if(j==-1 || s1[i]==s1[j]){i++;j++;Next[i]=j;}elsej=Next[j];}
}
int main()
{while(~scanf("%s %s",s1,s2))//s1 模式串,s2 主串{len1= strlen(s1);len2= strlen(s2);pre_kmp();int i=0,j=0,k=0;while(i < len2){ans[k]=s2[i];while(j!=-1 && ans[k]!=s1[j])j=Next[j];i++;j++;pre[k++]=j;//记录匹配到k位置时对应的成功匹配的模式串字符数目if(j==len1){k-=len1;//相当于删除j=pre[k-1];//模式串跳转的位置}}ans[k] = '\0';printf("%s\n",ans);}return 0;
}

Censor SCU - 4438 (KMP)相关推荐

  1. SCU - 4438 (KMP)

    SCU - 4438 (KMP) Censor frog is now a editor to censor so-called sensitive words (敏感词). She has a lo ...

  2. Censor SCU - 4438 (hash 哈希做法)

    Censor SCU - 4438 题意:给你两串字符串w和p.在p中不停删除w,直到p中没有w.输出此时剩余的字符串. 解题思路: 字符串问题考虑hash做法.先求出字符串w的哈希值.然后遍历字符串 ...

  3. C - Censor SCU - 4438

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

  4. SCU - 4438 KMP

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

  5. F - Censor SCU - 4438(栈 + hash)

    分析 题意 给我们一个字符串 t,又给我们一个字符串s,让我们删除 s中第一个的t,如果在删除之后的s字符串还存在t那么我们一直删除,直到删除之后不在 出现t为止,输出s剩余的内容 样例 abc aa ...

  6. ACM: SCU 4438 Censor - KMP

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

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

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

  8. SCU - 4438 Censor (KMP)

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

  9. SCU 4438 Censor (KMP)

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

最新文章

  1. Redis 分布式锁如何自动续期
  2. python pandas DataFrame 查找NaN所在的位置
  3. 在js对象上绑定js数组原生方法
  4. 2019年招聘python工程师薪资飙升,Python这些技能你掌握了吗
  5. 浏览器渲染机制面试_面试官不讲码德,问我Chrome浏览器的渲染原理(6000字长文)...
  6. HTML5新布局元素布局,HTML5新的布局元素
  7. 论文浅尝 | 混合注意力原型网络的含噪音少样本的关系分类
  8. php中$tpl= add_member_info ;什么意思,DEDECMS会员信息在个人模板info和index的调用问题...
  9. 安卓非常实用的自动化测试工具 -- Monkey详细的说明
  10. (大数据工程师学习路径)第二步 Vim编辑器----Vim文档编辑
  11. react根据中文获取拼音_react下将输入的汉字转化为拼音
  12. C++(21)——反向输出一个三位数
  13. UEFI 编程(一)
  14. 【原创】从BZOJ2683 简单题中 整 CDQ分治解决三维偏序
  15. 烤仔的朋友们丨政策暖风吹来,国内公链们的春天来了?
  16. 纯前端JS实现一个登记照改换底色背景色功能
  17. 金融业分布式数据库选型及HTAP场景实践
  18. Kubernetes(k8s)CNI(Calico)网络模型原理
  19. 【BLE】蓝牙4.2核心协议
  20. Java中自己实现log2(N)

热门文章

  1. 康拓展开以及逆展开 板子
  2. Android开发--SQLit嵌入式数据存储
  3. 多米音乐总裁石建平:社交化将成手机音乐新突破口
  4. 询价单,报价单,采购申请,采购定单
  5. UPC-6467 Many Formulas(深搜暴力)
  6. VC++之MFC从零开始实现windows系统任务管理器(一、windows任务管理器界面的制作)
  7. 哪些辅助工具能带来更好的seo优化呢?
  8. 【Matlab PolySpace 代码静态分析使用教程】
  9. 微信留言点赞python_荐微信文章数据分析一(阅读点赞评论)
  10. PCIE的4K配置空间解释