问题描述

LG4824


题解

大概需要回顾(看了题解)

KMP

先对要删除的 模式串 进行自我匹配,求出 \(\mathrm{fail}\)

然后再扫 文本串 的过程中记录一下每个字符匹配的最大长度,用栈进行删除。

这类删除一段连续区间的问题常用栈来优化维护


\(\mathrm{Code}\)

#include<bits/stdc++.h>
using namespace std; template <typename Tp>
void read(Tp &x){
x=0;char ch=1;int fh;
while(ch!='-'&&(ch>'9'||ch<'0')) ch=getchar();
if(ch=='-') ch=getchar(),fh=-1;
else fh=1;
while(ch>='0'&&ch<='9') x=(x<<1)+(x<<3)+ch-'0',ch=getchar();
x*=fh;
} char a[1000007],b[1000007];
int n,m;
int fail[1000007]; void KMP(){
for(int i=2,j=0;i<=m;i++){
while(j&&b[i]!=b[j+1]) j=fail[j];
if(b[i]==b[j+1]) ++j;
fail[i]=j;
}
} int sta[1000007],top;
int opt[1000007]; void solve(){
for(int i=1,j=0;i<=n;i++){
while(j&&a[i]!=b[j+1]) j=fail[j];
if(a[i]==b[j+1]) ++j;
opt[i]=j;sta[++top]=i;
if(j==m){
top-=j;
j=opt[sta[top]];
}
}
for(int i=1;i<=top;i++) putchar(a[sta[i]]);
puts("");
} int main(){
ios::sync_with_stdio(0);
cin>>(a+1);n=strlen(a+1);
cin>>(b+1);m=strlen(b+1);
KMP();
solve();
return 0;
}

最新文章

  1. django 数据库交互
  2. Charles 3.11.5 绿色特别版
  3. asdsa
  4. 组合数学(全排列)+DFS CSU 1563 Lexicography
  5. scandir 使用示例
  6. 记录一些容易忘记的属性 -- UIGestureRecognize手势
  7. extern &quot;c&quot; 的作用
  8. notepad++ 配置笔记
  9. [转]理解SSL(https)中的对称加密与非对称加密
  10. MongoDB聚合
  11. json解析,异步下载(listview仅滑动时加载)Demo总结
  12. ADC获取滑块的值(8通道)
  13. expect 批量自动部署ssh 免密登陆 之 三
  14. 《C#并发编程经典实例》学习笔记—异步编程关键字 Async和Await
  15. git合并
  16. 几张图看明白VAO、VBO、EBO的关系和代码顺序
  17. 关于ORA-06508 , ORA-04068异常的详细说明
  18. 编码,基本数据类型,str索引和切片,for循环
  19. 2014.10.5 再次学习LINUX
  20. 《剑指offer》第四十题(最小的k个数)

热门文章

  1. VIJOS-P1167 南蛮图腾
  2. [HDU6288]Tree
  3. 2019csp-s
  4. C#开发BIMFACE系列23 服务端API之获取模型数据8:获取模型链接信息
  5. Yii2处理密码加密及验证
  6. 《细说PHP》第四版 样章 第23章 自定义PHP接口规范 4
  7. 用python读写和处理csv文件
  8. C# - WinFrm应用程序调用SharpZipLib实现文件的压缩和解压缩
  9. UTF-8和BOM的一些说明
  10. 图解servlet