POJ 2752+KMP+利用next数组性质求出所有相同的前缀和后缀
来源:互联网 发布:知乎 什么叫头部媒体 编辑:程序博客网 时间:2024/06/06 01:55
题目链接:点击进入
这个题目要求所有相同的前缀和后缀的长度。我们可以利用KMP算法中next数组的性质,在next[len]这个点不断的失配下去,这样就可以将所有相同的前后缀的长度求出来。还要注意这个中整个串的长度也可以看成是一个合法的解。
代码如下:
#include<iostream>#include<cstdio>#include<cstring>using namespace std;const int maxn=400000+100;char str[maxn];int next1[maxn];int ans[maxn],cnt;void kmp_next1(char x[],int m,int next1[]){ int i,j; j=next1[0]=-1; i=0; while(i<m-1) { while(-1!=j && x[i]!=x[j]) j=next1[j]; next1[++i]=++j; } ///在next[m]这个点要一直"失配"下去 ///这样就可以将所有与后缀相同的前缀求出来 while(-1!=j) { if(x[i]==x[j]) ans[cnt++]=j+1; j=next1[j]; }}int main(){ freopen("in.txt","r",stdin); while(scanf("%s",str)!=EOF) { int len=strlen(str); cnt=0; kmp_next1(str,len,next1); for(int i=cnt-1;i>=0;i--) printf("%d ",ans[i]); printf("%d\n",len); } return 0;}
1 0
- POJ 2752+KMP+利用next数组性质求出所有相同的前缀和后缀
- KMP算法---核心就是NEXT数组求解---最长真后缀与前缀相同的字符数
- 求最长公共前缀和后缀—基于KMP的next数组
- POJ 2406(KMP next数组性质)
- Hdu 4552 怪盗基德的挑战书 (所有前缀出现次数和 后缀数组或KMP)
- KMP的next数组性质运用
- HDU3746 KMP相同公共前缀和公共后缀的最大长度应用及KMP
- hdu1358(KMP,next数组性质)
- 所有既是前缀又是后缀的子串 KMP POJ 2752 Seek the Name, Seek the Fame
- [KMP-NEXT数组性质]POJ 2752 Seek the Name, Seek the Fame
- 求所有前缀-后缀字符串相等的长度(kmp算法中的nxet数组)
- POJ 2406(KMP中next的性质)
- poj 2406 KMP算法中next的一个性质
- poj2406—KMP next数组的性质求最小周期
- poj 2752 (找既是前缀又是后缀的串的长度)kmp/拓展kmp
- KMP算法的前缀next数组最通俗的解释
- KMP算法的前缀next数组最通俗的解释
- KMP算法的前缀next数组最通俗的解释
- Scala数组小结
- Delete Node in a Linked List
- POJ2935 Basic Wall Maze(BFS)
- 【POJ3071】【Football】
- 4.5 内联函数
- POJ 2752+KMP+利用next数组性质求出所有相同的前缀和后缀
- ibatis传递多参数的方法
- 删除字符串中最少的字符
- 【细说PHP学习】第十五章 文件系统处理
- 从printk到framebuff
- pkg-config工具的使用
- 初学Hibernate框架之环境配置和测试
- MySQL Cluster 配置文件(config.ini)详解
- JVM参数详解