HDU3336-Count the string-KMP(next数组理解)

来源:互联网 发布:audition软件下载 编辑:程序博客网 时间:2024/06/05 00:28

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=3336

好吧,对next数组还是没有理解到位,感觉有很多的出发点。还需要去更深的理解。

#include<iostream>#include<string>using namespace std;string str;int n,Next[200005];void get_next(){    int i=0,j=-1;    Next[0]=-1;    while(i<n){        if(j==-1||str[i]==str[j]){            i++,j++;            Next[i]=j;          //  没有判断。        }else{            j=Next[j];        }    }}int main(){    int t;    cin.sync_with_stdio(false);    cin>>t;    while(t--){        cin>>n>>str;        int sum=0;        get_next();        //for(int i=0;i<=n;i++) cout<<Next[i]<< ' ';cout<<endl;        for(int i=1;i<=n;i++){            int j=i;            while(j){                sum=(sum+1)%10007;                j=Next[j];            }        }        cout<<sum<<endl;    }    return 0;}


0 0
原创粉丝点击