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;
}
相關文章
- POJ1743 Musical Theme(字尾陣列 二分)陣列
- 1588 所有奇數長度子陣列的和(字首和)陣列
- 字尾陣列 SA陣列
- 字尾陣列模板陣列
- 字尾陣列,SA陣列
- 中綴轉字尾和字首
- 【筆記】字尾陣列筆記陣列
- 字尾陣列(後續)陣列
- 字尾陣列複習陣列
- OI loves Algorithm——字尾陣列Go陣列
- 字尾陣列 學習筆記陣列筆記
- 字尾陣列學習筆記陣列筆記
- 合併陣列物件中相同的屬性值陣列物件
- BZOJ2882: 工藝(字尾陣列)陣列
- abc284F 字首+逆序+字尾
- Java按位或合併ipv6字首和字尾Java
- 求陣列內所有偶數的和陣列
- 448. 找到所有陣列中消失的數字陣列
- 差分陣列原理與其字首和的應用陣列
- 字首中綴字尾表示式規則
- Codeforces #123D: 字尾陣列+單調棧3D陣列
- 洛谷P5108 仰望半月的夜空(字尾陣列)陣列
- 淦448. 找到所有陣列中消失的數字陣列
- LeetCode-448-找到所有陣列中消失的數字LeetCode陣列
- P10469 字尾陣列(Hash+二分)陣列
- JAVA 求出一個一維int型陣列的元素最大值、最小值、平均值、和所有元素之和Java陣列
- 從Bash中的字串中刪除固定的字首/字尾字串
- 力扣448. 找到所有陣列中消失的數字力扣陣列
- 資料結構基礎--字首樹&&字尾樹資料結構
- POJ-2352 Stars(樹狀陣列)陣列
- 陣列鍵值統一增加字首陣列
- 【新特性速遞】數字輸入框的字首和字尾(位於輸入框內部)
- 【筆試】陣列、線性表的本質區別筆試陣列
- POJ-3061 Subsequence(字首和+二分/尺取)
- 洛谷P3763 [TJOI2017]DNA(字尾陣列 RMQ)陣列MQ
- 【資料結構與演算法】字串匹配(字尾陣列)資料結構演算法字串匹配陣列
- 如何新增javascript陣列n乘以相同的元素JavaScript陣列
- [開發教程]第16講:Bootstrap文字框的字首與字尾boot