[关闭]
@zhangche0526 2017-02-25T06:27:40.000000Z 字数 446 阅读 717

kmp

  1. #include<iostream>
  2. #include<cstdio>
  3. #include<cstring>
  4. using namespace std;
  5. const int MAXL=1000;
  6. char T[MAXL+1],P[MAXL+1];
  7. int next[MAXL+1];
  8. int kmp()//返回T中P第一次出现的起始位置
  9. {
  10. int Tl=strlen(T),Pl=strlen(P);
  11. int i,j;
  12. next[0]=next[1]=0;
  13. //初始化next数组
  14. for(i=1;i<Pl;i++)
  15. {
  16. j=next[i];
  17. while(j&&P[i]!=P[j]) j=next[j];
  18. next[i+1]=(P[i]==P[j])?j+1:0;
  19. }
  20. //
  21. j=0;
  22. for(i=0;i<Tl;i++)
  23. {
  24. while(j&&P[j]!=T[i]) j=next[j];
  25. if(P[j]==T[i]) ++j;
  26. if(j==Pl)
  27. return i-Pl+1;
  28. }
  29. }
  30. int main()
  31. {
  32. cin>>T>>P;
  33. cout<<kmp();
  34. return 0;
  35. }
添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注