当前位置:   article > 正文

Java十大经典算法—KMP_java计算kmp

java计算kmp

字符串匹配问题:

1.暴力匹配

  1. public class ViolenceMatch {
  2. public static void main(String[] args) {
  3. String str1 = "硅硅谷 尚硅谷你尚硅 尚硅谷你尚硅谷你尚硅你好";
  4. String str2 = "尚硅谷你尚硅你好";
  5. int index = violenceMatch(str1, str2);
  6. System.out.println("index=" + index);
  7. }
  8. //暴力匹配算法
  9. public static int violenceMatch(String str1, String str2) {
  10. char[] s1 = str1.toCharArray();
  11. char[] s2 = str2.toCharArray();
  12. int s1Len =s1.length;
  13. int s2Len =s2.length;
  14. int i = 0;//i索引指向s1
  15. int j = 0;//j索引指向s2
  16. while (i < s1Len && j < s2Len) {
  17. if (s1[i] == s2[j]) {
  18. i++;
  19. j++;
  20. }else {
  21. //如果匹配指令失败,令i=i-(j-1)【向后移一位】,j=0
  22. i=i-(j-1);
  23. j=0;
  24. }
  25. }
  26. if (j == s2Len) {
  27. return i-j;
  28. }else {
  29. return -1;
  30. }
  31. }
  32. }

2.KMP算法 

概念

Knuth-Morris-Pratt 字符串查找算法,简称为 “KMP 算法”,常用于在一个文本串 S 内查找一个模式串 P 的出现位置,这个算法由 Donald Knuth、Vaughan Pratt、James H. Morris 三人于 1977 年联合发表,故取这 3 人的姓氏命名此算法.

KMP 方法算法就利用之前判断过信息,通过一个 next 数组,保存模式串中前后最长公共子序列的长度,每次回溯时,通过 next 数组找到,前面匹配过的位置,省去了大量的计算时间

key:next数组、KMP搜索

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