http://poj.org/problem?id=1961
#include <cstdio>
#include <cstring>
#include <iostream>
using namespace std;
int len,t;
char s[1000005];
int next[1000005];
int main(){
while(1){
scanf("%d",&len);
if(len == 0)break;
scanf("%s",s);
printf("Test case #%d\n",++t);
int i = 0,j = -1;
next[0] = -1;
while(i != len){
if(j == -1 || s[i] == s[j]){
next[++i] = ++j;
if(i % (i - next[i]) == 0){
int k = i / (i - next[i]);
if(k>1)printf("%d %d\n",i,k);
}
}
else j = next[j];
}
printf("\n");
}
return 0;
}
字符串匹配算法
本文介绍了一个字符串匹配算法的具体实现,该算法使用了next数组来优化模式串的匹配过程,并通过一个具体的POJ题目示例展示了其应用。算法能够高效地找出主串中模式串出现的位置及其重复次数。
5万+

被折叠的 条评论
为什么被折叠?



