标签:blog os io for div ar 算法 ios
运用KMP算法解决的一道题,求一下Next数组,然后直接找最后一个元素的next值,依次找下标为next的元素,直接用总数减去next值就是要求的一个数,直到找到next的值为0的时候结束!
#include<iostream>
#include<algorithm>
#include<cstring>
using namespace std;
int a[1000010];
char s[1000010];
int next[1000010];
int m;
void getNext(){
int j,k;
next[0]=-1;
j=0;k=-1;
while(j<m)
{
if(k==-1||s[j]==s[k])
{
j++;
k++;
next[j]=k;
}
else
k=next[k];
}
}
int main()
{
int n,count = 0;
cin >> n;
while(n--)
{
count++;
int flag = 0,sum = 0;
cin>>s;
m = strlen(s);
/*for(int i =0;i <=1000002;i++)
{
next[i] = 0;
a[i] = 0;
}*/
getNext();
int t=next[m];
//cout<< t;
while(t)
{
a[sum++] = m-t;
t =next[t];
}
a[sum++]= m;
cout<< "Case #"<< count << ": " ;
cout<< sum<< endl;
for(int i =0;i < sum;i++)
cout<< a[i]<< " ";
cout<<endl;
}
return 0;
}
标签:blog os io for div ar 算法 ios
原文地址:http://www.cnblogs.com/DUANZ/p/3872938.html