第三週下 kmp
E - Period HDU - 1358
題意
求一串字元中的字首中有多少最大週期數,例如“aaa”中,前兩個“aa”最小週期長度為“a”,所以週期長度為2,前三個“aaa”的最小週期也是“a”所以週期長度為3;再如“aabaabaabaab”中前6個“aabaab”的最小週期長度為“aab”,所以週期為2.前9個有3個aab,所以週期長度為三
輸出第一個數是你所擷取的字串長度,第二個數是有幾個迴圈週期
aabaab”的字首next[]陣列的儲存是這樣的{0, 1, 0, 1, 2, 3}
#include<stdio.h>
#include<string.h>
using namespace std;
const int N=1000002;
char s1[N],s2[N];
int next[N];
void gnext(int l)
{
int i=0,j=-1;
next[0]=-1;
while(i<l)
{
if(j==-1||s1[i]==s1[j])
{
++i,++j;
next[i]=j;
}
else j=next[j];
}
}
int main()
{
int n,q=1;
while(~scanf("%d",&n)&&n)
{
scanf("%s",s1);
int l1=strlen(s1);
gnext(l1);
printf("Test case #%d\n",q++);
for(int i=1;i<=n;i++)
{
if(!next[i])
continue;
int k=i-next[i];
if(i%k==0)
printf("%d %d\n",i,i/k);
}
printf("\n");
}
return 0;
}
相關文章
- 第三週週二
- 第三週 週二
- 第三週週三
- 第三週週五
- 第三週
- POJ 1261 Period KMP (字串週期)KMP字串
- 第三週總結
- 第三週作業
- 第三週週一
- 暑假生活第三週
- 第三週 架構架構
- Javaweb第三週作業JavaWeb
- java第三週學習Java
- 第三週Swift總結Swift
- 第三週 作業3
- 第三週作業2
- 第三週 作業4
- 第三週放歌記錄
- 暑假第三週總結
- 暑假第三週規劃
- 字串匹配基礎下——KMP 演算法字串匹配KMP演算法
- KMPKMP
- 遊戲⼴告買量週報(3月第三週)遊戲
- Python第三週作業Python
- Java第三週作業(3)Java
- 第三週學習總結
- 第三週學習日曆
- 學習Java的第三週Java
- 馬哥教育第三週作業
- POJ--2406Power Strings+KMP求字串最小週期KMP字串
- KMP模版KMP
- kmp——板子~~~KMP
- KMP模板KMP
- 第三週作業(三):wc程式C程式
- 第三週蘇格拉底提問
- 第六週第三天6.3
- 第七週第三天7.3
- 學Java的第三週(迴圈)Java