标签: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