91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Java中如何實現一個KMP算法

發布時間:2021-07-24 14:36:44 來源:億速云 閱讀:137 作者:Leah 欄目:編程語言

這篇文章將為大家詳細講解有關Java中如何實現一個KMP算法,文章內容質量較高,因此小編分享給大家做個參考,希望大家閱讀完這篇文章后對相關知識有一定的了解。

KMP算法是一種改進的字符串匹配算法,由D.E.Knuth,J.H.Morris和V.R.Pratt同時發現,因此人們稱它為克努特——莫里斯——普拉特操作(簡稱KMP算法)。KMP算法的關鍵是利用匹配失敗后的信息,盡量減少模式串與主串的匹配次數以達到快速匹配的目的。具體實現就是實現一個next()函數,

函數本身包含了模式串的局部匹配信息。時間復雜度O(m+n)。

代碼如下

import java.util.Arrays; public class Test {   /**   * @param str 文本串   * @param dest 模式串   * @param next 匹配核心數組   * @return   */  public static int kmp(String str, String dest,int[] next) {    for(int i = 0, j = 0; i < str.length(); i++){      if (j > 0 && str.charAt(i) != dest.charAt(j)) {        j = next[j - 1];      }      if (str.charAt(i) == dest.charAt(j)) {        j++;      }      if (j == dest.length()) {        return i-j+1;      }    }    return 0;  }   public static int[] kmpnext(String dest) {    int[] next = new int[dest.length()];    next[0] = 0;    for(int i = 1,j = 0; i < dest.length(); i++) {      if (j > 0 && dest.charAt(j) != dest.charAt(i)) {        j = next[j - 1];      }      if (dest.charAt(i) == dest.charAt(j)) {        j++;      }      next[i] = j;    }    return next;  }   public static void main(String[] args){    String a = "ABABAE";    String b = "ABABABABAEBEABADAEABAEABABAE";    int[] next = kmpnext(a);    System.out.println(Arrays.toString(next));    int res = kmp(b, a,next);    System.out.println(res);  } }

關于Java中如何實現一個KMP算法就分享到這里了,希望以上內容可以對大家有一定的幫助,可以學到更多知識。如果覺得文章不錯,可以把它分享出去讓更多的人看到。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

鹤岗市| 孟连| 天等县| 广西| 江源县| 新干县| 万年县| 惠安县| 伊金霍洛旗| 鄢陵县| 西乌珠穆沁旗| 承德市| 荔浦县| 吐鲁番市| 永兴县| 柳江县| 安新县| 乌拉特前旗| 张家界市| 共和县| 灯塔市| 吉首市| 泸水县| 冀州市| 邳州市| 石门县| 德阳市| 湖南省| 大足县| 阳山县| 漳浦县| 宁波市| 阿瓦提县| 佛学| 仁寿县| 南岸区| 四平市| 保山市| 西林县| 彩票| 日照市|