首页 > 代码库 > hdu 4513 KMP里next数组的运用
hdu 4513 KMP里next数组的运用
这道题不难 前提是搞懂next数组的求的过程 加上点递归的思想
#include<stdio.h> #include<string.h> #include<iostream> using namespace std; char str[200021]; int main() { int n,i,j,T; int next[200020]; scanf("%d",&T); while(T--) { scanf("%d",&n); scanf("%s",str); str[n]=‘@‘; n++; memset(next,0,sizeof(next)); next[0]=-1; int sum=0,j=0,k=-1; while(j<n) { if(k==-1||str[j]==str[k]) { ++k; ++j; next[j]=k; } else k=next[k]; } sum=0; for(i=1;i<n;i++) { sum++; int k=i; while(next[k]) { sum++; sum%=10007; k=next[k]; } } printf("%d\n",sum); } return 0; }
hdu 4513 KMP里next数组的运用
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。