POJ 2752+KMP+利用next陣列性質求出所有相同的字首和字尾
題目連結:點選進入
這個題目要求所有相同的字首和字尾的長度。我們可以利用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;
}
相關文章
- POJ2752--KMP求所有可能的相同字首字尾KMP
- POJ 3581-Sequence(字尾陣列)陣列
- POJ 1743 Musical Theme(字尾陣列)陣列
- HDU5147 Sequence II(樹狀陣列+字首和+字尾和)陣列
- POJ1743 Musical Theme(字尾陣列 二分)陣列
- POJ2774Long Long Message(字尾陣列模板)陣列
- 字尾陣列模板陣列
- 字尾陣列 SA陣列
- 字尾陣列,SA陣列
- 1588 所有奇數長度子陣列的和(字首和)陣列
- POJ 2217-Secretary(字尾陣列+高度陣列-最大公共子串長度)陣列
- linux 刪除所有字尾名相同的檔案Linux
- poj 2774 求兩字串的最長公共子串 字尾陣列字串陣列
- 字尾陣列複習陣列
- 字尾陣列(後續)陣列
- 字尾陣列詳解陣列
- 【筆記】字尾陣列筆記陣列
- POJ 3415 Common Substrings(字尾陣列求重複字串)陣列字串
- POJ 3294 Life Forms(字尾陣列求k個串的最長子串)ORM陣列
- HDU 5769-Substring(字尾陣列-不相同的子串的個數)陣列
- 【Kmp求既是字首又是字尾的子串】POJ - 2752 Seek the Name, Seek the FameKMP
- [POJ 3415] Common Substrings (字尾陣列+單調棧優化)陣列優化
- OI loves Algorithm——字尾陣列Go陣列
- POJ 2774-Long Long Message(字尾陣列+高度陣列-最大公共子串長度)陣列
- POJ 3693 Maximum repetition substring(字尾陣列求最長重複子串)陣列
- poj 3415 Common Substrings(長度大於k的相同子串對數xian 字尾陣列+單調桟統計)陣列
- 學習筆記----字尾陣列筆記陣列
- 字尾陣列 學習筆記陣列筆記
- 字尾陣列學習筆記陣列筆記
- POJ 1743 Musical Theme (字尾陣列,求最長不重疊重複子串)陣列
- BZOJ2882: 工藝(字尾陣列)陣列
- 合併陣列物件中相同的屬性值陣列物件
- POJ 3415-Common Substrings(字尾陣列+單調棧-公共子串的長度)陣列
- abc284F 字首+逆序+字尾
- 求出陣列中出現次數大於一半的數字陣列
- KMP演算法的next、next value陣列程式碼實現及POJ3461KMP演算法陣列
- 448. 找到所有陣列中消失的數字陣列
- 差分陣列原理與其字首和的應用陣列