当前位置:   article > 正文

(43)5.10数据结构第四章串(串的模式匹配)

(43)5.10数据结构第四章串(串的模式匹配)

1.朴素模式的匹配算法

  1. #define MAXLEM 255
  2. typedef struct
  3. {
  4. char ch[MAXLEM];
  5. int length;
  6. }SString;
  7. //1.朴素模式匹配
  8. int Index(SString S, SString T)
  9. {
  10. int i = 1; int j = 1;
  11. while (i <= S.length && j <= T.length)
  12. {
  13. if (S.ch[i] == T.ch[i])
  14. {
  15. ++i;
  16. ++j; //继续比较后继字符
  17. }
  18. else
  19. {
  20. i = i - j + 2;
  21. j = 1; //指针后退重新开始匹配
  22. }
  23. if (j > T.length)
  24. return i - T.length;
  25. else
  26. return 0;
  27. }
  28. }
  29. //时间复杂度O(nm)

2.KMP算法

2.1KMP算法

  1. //2.KMP算法
  2. int Index(SString S, SString T,int next[])
  3. {
  4. int i = 1; int j = 1;
  5. while (i <= S.length && j <= T.length)
  6. {
  7. if (j==0||S.ch[i] == T.ch[i])
  8. {
  9. ++i;
  10. ++j; //继续比较后继字符
  11. }
  12. else
  13. {
  14. i = i - j + 2;
  15. j = 1; //指针后退重新开始匹配
  16. }
  17. if (j > T.length)
  18. return i - T.length;
  19. else
  20. return 0;
  21. }
  22. }
  23. //时间复杂度O(n+m)

过程

2.2KMP算法进一步优化

  1. //3.KMP算法优化
  2. int Index(SString S, SString T,int next[])
  3. {
  4. int i = 1; int j = 1;
  5. while (i <= S.length && j <= T.length)
  6. {
  7. if (j == 0 || S.ch[i] == T.ch[i])
  8. {
  9. ++i;
  10. ++j; //继续比较后继字符
  11. }
  12. else
  13. {
  14. j = next[j]; //模式串向右移动
  15. }
  16. if (j > T.length)
  17. return i - T.length;//匹配成功
  18. else
  19. return 0;
  20. }
  21. }

2.3KMP算法--求next数组

3.求nextval数组

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

闽ICP备14008679号