当前位置:   article > 正文

KMP算法:主串、模式串,next【lenT】数组下标从0开始_kmp算法 next数组j从0开始

kmp算法 next数组j从0开始
  1. #include <stdio.h>
  2. #include <string.h>
  3. #define N 100
  4. using namespace std;
  5. void Next(int next[],int lenT,char* T)
  6. {
  7. int i=0,j=-1;
  8. next[0]=-1;
  9. while (i<lenT)
  10. {
  11. if(j==-1 || T[i]==T[j])
  12. {
  13. i++;j++;
  14. next[i]=j;
  15. }
  16. else
  17. j=next[j];
  18. }
  19. }
  20. int KMP(char*S,char*T,int lenS,int lenT)
  21. {
  22. int next[lenT];
  23. Next(next,lenT,T);
  24. int i=0,j=0;
  25. while (i<lenS&&j<lenT)
  26. {
  27. if(j==-1 || S[i]==T[j])
  28. {
  29. i++;j++;
  30. }
  31. else
  32. {
  33. j=next[j];
  34. }
  35. }
  36. if(j==lenT)
  37. {
  38. return i-lenT+1;
  39. }
  40. else return 0;
  41. }
  42. int main()
  43. {
  44. char S[N],T[N];
  45. int lenS,lenT;
  46. for(int i =1;i<=3;i++)
  47. {
  48. S[N]={0};
  49. T[N]={0};
  50. scanf("%s",S);
  51. lenS=strlen(S); //printf("%d\n",lenS );
  52. scanf("%s",T);
  53. lenT=strlen(T); //printf("%d", lenT);
  54. printf("%d\n",KMP(S,T,lenS,lenT));
  55. }
  56. return 0;
  57. }
运行结果
主串:string     模式串:str    模式串在主串中的位置:1

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/小小林熬夜学编程/article/detail/169234?site
推荐阅读
相关标签
  

闽ICP备14008679号