热门

最新

红包

立Flag

投票

同城

我的

发布
qq_40344790
DevFrank
4 年前
trueqq_40344790

#博客之星参与奖

坐标苏州,已收到小摆件。

很不错,有创意。

CSDN App 扫码分享
分享
评论
4
打赏
  • 复制链接
  • 举报
下一条:
大佬们能不能解释下这个代码主要用来干嘛!!! #include<bits/stdc++.h> using namespace std; int len(char *s) { int i=0; while(s[i++]!='\0'){} return i-1; } void GenKMPNext(int next[],char *s) { int n=len(s); next[0]=-1; next[1]=0; int i; for(i=2;i<n;i++) { int k=0; int max=0; while(++k<i) { bool flag=true; for(int j=0;j<k;j++) { if(s[j]==s[i-k+j])continue; else { flag=false; break; } } if(flag) { max=k; } } next[i]=max; } for(int i=2;i<n;i++) { if(s[next[i]]==s[i])next[i]=next[next[i]]; } } int Find(char* s,char * p) { int n=len(p); int next[n]; GenKMPNext(next,p); int i,j; for(i=0, j=0;i<n && j<len(s);) { if(p[i]==s[j]){ i++,j++; } else if(next[i]>=0)i=next[i]; else { i=0;j++; } } if(i>=n) { return j-n; } else return -1; } int main() { char s[100]; cin>>s; char p[10]; cin>>p; cout<<Find(s,p)<<endl; // int next[100]; // GenKMPNext(next,s); // for(int i=0;iclen(s);i++) // { // cout<<next[i]<<endl; // } }
立即登录