当前位置:   article > 正文

KMP字符串匹配(按照《算法导论》伪代码实现)_近似串匹配的伪代码

近似串匹配的伪代码
  1. #include <iostream>
  2. using namespace std;
  3. int * computePrefixFunction(const char * P)
  4. {
  5. int k = 0;
  6. int length = strlen(P);
  7. int * pi = (int *)new int[length+1];
  8. pi[1] = 0;
  9. int i;
  10. for(i=2;i<=length;i++)
  11. {
  12. while(k>0 && P[i-1] != P[k])
  13. k = pi[k];
  14. if(P[k] == P[i-1])
  15. k = k+1;
  16. pi[i] = k;
  17. }
  18. return pi;
  19. }
  20. void KMPFunction(const char * T,const char * P)
  21. {
  22. int * pi = computePrefixFunction(P);
  23. int lengthOfText = strlen(T);
  24. int lengthOfPattern = strlen(P);
  25. int i;
  26. int q = 0;
  27. for(i=1;i<=lengthOfText;i++)
  28. {
  29. while(q>0 && T[i-1] != P[q])
  30. q = pi[q];
  31. if(T[i-1] == P[q])
  32. q = q+1;
  33. if(q == lengthOfPattern)
  34. {
  35. cout<<"匹配位置"<<i-lengthOfPattern<<endl;
  36. q = pi[q];
  37. }
  38. }
  39. }
  40. void main ()
  41. {
  42. char * T = "abcbabababacagggabababaababaca";
  43. char * P = "ababaca";
  44. KMPFunction(T,P);
  45. }


 

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

闽ICP备14008679号