链接:

https://www.luogu.org/problem/P5410#submit

题意:

有两个字符串aa,bb,要求输出bb与aa的每一个后缀的最长公共前缀

思路:

扩展kmp模板, 上一个大佬的详解链接

https://segmentfault.com/a/1190000008663857

代码:

#include <bits/stdc++.h>
using namespace std;
const int MAXN = 1e5+10; char a[MAXN], b[MAXN];
int Next[MAXN], Exten[MAXN]; void GetNext(char *t)
{
int p = 0, a = 0;
int len = strlen(t);
Next[0] = len;
for (int i = 1;i < len;i++)
{
if (i >= p || i+Next[i-a] >= p)
{
if (i >= p)
p = i;
while (p < len && t[p] == t[p-i])
p++;
Next[i] = p-i;
a = i;
}
else
Next[i] = Next[i-a];
}
} void ExKmp(char *s, char *t)
{
int a = 0, p = 0;
int len = strlen(s);
GetNext(t);
for (int i = 0;i < len;i++)
{
if (i >= p || i+Next[i-a] >= p)
{
if (i >= p)
p = i;
while (p < len && s[p] == t[p-i])
p++;
Exten[i] = p-i;
a = i;
}
else
Exten[i] = Next[i-a];
}
} int main()
{
scanf("%s %s", a, b);
ExKmp(a, b);
for (int i = 0;i < strlen(b);i++)
printf("%d ", Next[i]);
puts("");
for (int i = 0;i < strlen(a);i++)
printf("%d ", Exten[i]);
puts(""); return 0;
}

最新文章

  1. web分享QQ好友、QQ空间、新浪微博的api接口
  2. 每天一个linux命令(15):tail 命令
  3. android webview里获取和设置cookie
  4. nginx反向代理(proxy_pass)tomcat的过程中,session失效的问题解决
  5. WPFの三种方式实现快捷键
  6. Jquery实现简单到计时功能(setTimeout,setInterval)
  7. java 重写 重载
  8. C++:常类型Const
  9. ZigBee绑定细节
  10. JavaScript 使用
  11. Android中自定义ActionBar的背景色等样式style
  12. 关于js封装框架类库之属性操作
  13. E - Catch That Cow
  14. [DP之普通系列]
  15. 如何实现dede首页栏目文章指定调用
  16. ajax调用servlet
  17. 在Python虚拟环境中安装scrapy
  18. JavaScript 正整数正则表达式
  19. nginx 301重定向一种实现方法
  20. 基于AT89C51单片机烟雾传感器

热门文章

  1. [bzoj4842][bzoj1283][Neerc2016]Delight for a Cat/序列_线性规划_费用流
  2. Maximum Frequency Stack
  3. DAO语句如何定义属性类型
  4. 二叉树(Java实现)
  5. idea配置glassFish
  6. Java中关于Integer, String 类型变量 == 与 equals 判断的坑
  7. Coloring Edges(有向图环染色)-- Educational Codeforces Round 72 (Rated for Div. 2)
  8. GTID复制
  9. WPF 异步加载窗体
  10. T100——作业action执行其他P作业,后台背景执行完后才能继续操作改作业