当前位置:   article > 正文

Java-算法-KMP_java kmp算法

java kmp算法

一. KMP算法的介绍

0. 前置条件

有两个字符串str1和str2,求str2是否是str1的子串(需连续),若是字串则返回str1中的下标,不存在返回-1.

例1. str1 ="abcd"   str2 = "abcd"  返回0

例2. str1 ="abcd"   str2 = "efgh"  返回-1

例3. str1 ="abcde"   str2 = "bcd"  返回1

1. 常规暴力解法

在遇到第一个不相等的字符后,str2回到首部,而str1回到一开始比较下一个位置

  1. class Solution {
  2. public int strStr(String haystack, String needle) {
  3. for (int i = 0; i < haystack.length(); i++) {
  4. int count = i;
  5. for (int j = 0; j < needle.length(); j++) {
  6. while (i < haystack.length() && j < needle.length() && haystack.charAt(i) == needle.charAt(j)) {
  7. i++;
  8. j++;
  9. }
  10. if (j == needle.length()) {
  11. return i - needle.length();
  12. }
  13. else{
  14. i = count;
  15. break;
  16. }
  17. }
  18. }
  19. return -1;
  20. }
  21. }

暴力解法的时间复杂度是非常高的,比如下例:

 在情况给不好的时候时间复杂度会接近O(m*n)

2. KMP的加速过程

  KMP算法是在暴力算法的基础上使用的算法,就是使用了next数组进行加速,先来使用。

  1. class Solution {
  2. public int strStr(String haystack, String needle) {
  3. return getIndexOf(haystack,needle);
  4. }
  5. public static int getIndexOf(String s,String m){
  6. if(s == "" && m == &
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/菜鸟追梦旅行/article/detail/662164
推荐阅读
相关标签
  

闽ICP备14008679号