您的位置:首页 > 其它

字符串专项:UVa 10298

2013-05-18 22:11 337 查看
基本的kmp,一遍kmp找出失配函数。然后如果n%(n-f
)=0,就输出n/(n-f
),

否则输出1即可。
#include <iostream>
#include <cstring>
#include <cstdio>
#include <algorithm>
using namespace std;
#define M 1000010
char s[M];
int f[M];
int main()
{
freopen("in.txt","r",stdin);
while(cin>>s)
{
if(s[0]=='.') break;
int n=strlen(s);
f[0]=f[1]=0;
for(int i=1;i<n;i++)
{
int j=f[i];
while(j&&s[i]!=s[j]) j=f[j];
f[i+1]=(s[i]==s[j]?j+1:0);
}
int ans=1;
if(n%(n-f
)==0) ans=max(ans,n/(n-f
));
cout<<ans<<endl;
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: