日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区

您的位置:首頁技術文章
文章詳情頁

java 實現KMP算法

瀏覽:25日期:2022-08-19 10:02:44

KMP算法是一種神奇的字符串匹配算法,在對 超長字符串 進行模板匹配的時候比暴力匹配法的效率會高不少。接下來我們從思路入手理解KMP算法。

在對字符串進行匹配的時候我們最容易想到的就是一個個匹配,類似下面這種:

java 實現KMP算法

換成Java代碼就是:

public static boolean bfSearch(String pattern,String txt){ if (txt.length() < pattern.length()) return false; for (int i = 0; i < txt.length(); i++) { boolean flag = false; for (int j = 0; j < pattern.length(); j++) {if (i+j>=txt.length()) return false;if (txt.charAt(i+j)!=pattern.charAt(j)){ flag = true;} } if (!flag){return true; } } return false; }

暴力匹配算法的時間復雜度為O(n*m),n為模板字符串,m為目標字符串,在處理復雜字符串時毫無疑問效率會非常低,由此誕生了KMP算法(時間復雜度為O(m+n) )。

以上面gif圖中的兩個字符串

​ txt = “aaacaaab”

​ pat = “aaab”

​ 為例我們來說一下KMP算法的思路。個人能力有限,您可以先行觀看此視頻去簡單學習KMP的基本原理。

簡單原理:構建狀態轉移數組,當遇到無法匹配的字符時根據狀態轉移數組進行回溯,以達到減少遍歷次數的目的。

1.首先構建狀態轉移數組:

對匹配模式字符串進行遍歷從左向右遍歷,如果 i 和 j(見源碼)所指向的元素相同,則將此狀態(j所指向的元素位置)進行保存最后保存的數組是一個Int類型的狀態碼數組,每個元素的含義是回溯時模板字符串(pattern)的狀態。

2.構建完成后通過狀態轉移數組和匹配模式字符串對傳入的目標字符串進行匹配。過程如下:

對目標字符串進行遍歷,檢索相同的字符元素。如果遇到不同的字符元素,根據 J(模板字符串的指針)所在的位置依靠狀態轉移數組來回溯遍歷狀態。并在回溯后繼續進行匹配。

3.源碼如下:

import java.util.Arrays;public class KMP { private int[] patArray; // 狀態轉移數組 private final String pattern;// 匹配模式字符串 public static boolean bfSearch(String pattern,String txt){ if (txt.length() < pattern.length())return false; for (int i = 0; i < txt.length(); i++) { boolean flag = false; for (int j = 0; j < pattern.length(); j++) {if (i+j>=txt.length())return false;if (txt.charAt(i+j)!=pattern.charAt(j)){ flag = true;} } if (!flag){return true; } } return false; } KMP(String pat) { // 通過匹配模式字符串構建對象 this.pattern = pat; patArray = new int[pattern.length()]; // 創建狀態轉移數組 int j = 0; for (int i = 1; i < pattern.length(); ) { if (pattern.charAt(i) == pattern.charAt(j)){ // 如果i和j指向的字符相同,則將此狀態進行保存patArray[i++] = ++j; // 保存的同時移步下一位 }else {// 如果 i 和 j 指向的字符不相同,則保持i不動,回溯j// 如果回溯后的j指向的字符與i相同,則將此時的狀態進行保存if (j <= pattern.length() - 1 && j >0) { j=patArray[--j]; // 回溯j if (pattern.charAt(i) == pattern.charAt(j)) { // 如果回溯后相同,則保存狀態 patArray[i++] = ++j; }}else if (j == 0) { // 如果回溯到頭,則保存為0狀態 patArray[++i] = 0;} } } } boolean search(String txt){ int j = 0; for (int i = 0; i < txt.length(); i++) { // 對輸入的字符串進行模式匹配 if (txt.charAt(i) != pattern.charAt(j)){// 如果匹配不成功,則根據狀態數組對j進行狀態更改if (j>0)--j; // 回溯j = patArray[j]; }else {++j; // 匹配成功則進入下一個狀態 } if (j == pattern.length()-1){ // 如果成功匹配,返回truereturn true; } } return false;// 匹配不成功 }}

后續的一些思考:

在對比較短的目標字符串而言,毫無疑問使用暴力法的效率(時間復雜度為O(M*N)會快一點,而當目標字符串的長度非常長以后,暴力匹配的效率就會大打折扣。

對于非常長的字符串來說,KMP的O(M+N)的效率相對來說就會非常高。

以上就是java 實現KMP算法的詳細內容,更多關于java 實現KMP算法的資料請關注好吧啦網其它相關文章!

標簽: Java
相關文章:
日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
日韩高清在线观看一区二区| 日韩中文字幕麻豆| 日韩欧乱色一区二区三区在线| 欧美日韩国产高清电影| 久久精品国语| 五月天久久网站| 亚洲视频www| 日韩影院精彩在线| 亚洲永久字幕| 日韩专区一卡二卡| 日韩一区二区三区免费视频 | 综合国产精品| 日韩精品视频在线看| 国产亚洲精品精品国产亚洲综合| 国产欧美一区二区三区国产幕精品| 国产精品中文字幕制服诱惑| 麻豆中文一区二区| 成人污污视频| 性欧美xxxx免费岛国不卡电影| 91精品观看| 蜜臀av一区二区三区| 日本不卡高清| 精品视频国内| 欧美手机在线| 中文无码日韩欧| 久久精品99国产精品日本| 国模大尺度视频一区二区| 99精品电影| 日韩中文字幕一区二区三区| 国产欧美日韩一区二区三区在线| 国产一区二区三区四区五区传媒| 一本大道色婷婷在线| 亚洲欧洲另类| 国产精品视频一区二区三区 | 噜噜噜躁狠狠躁狠狠精品视频| 亚洲人成亚洲精品| 欧美黑人巨大videos精品| 日本蜜桃在线观看视频| 黄色日韩精品| 国产日韩欧美三级| 老牛影视精品| 首页国产欧美日韩丝袜| 欧美激情福利| 红桃视频国产精品| 欧美在线91| 成人日韩在线| 日韩精品午夜视频| 精品三级av| 日韩视频一区| 麻豆视频一区二区| 亚洲综合二区| 国产一区二区色噜噜| 免播放器亚洲| 精品国产三区在线| 国产农村妇女精品一区二区| 国产精品**亚洲精品| 亚洲婷婷在线| 国产欧美日韩视频在线| 欧美~级网站不卡| 国产欧美日韩精品一区二区免费 | 在线国产精品一区| 精品中文在线| 亚洲字幕久久| 日本免费久久| 久久激情五月激情| 女人天堂亚洲aⅴ在线观看| 国产黄色精品| 男女激情视频一区| 日韩久久精品网| 日韩一区二区三区四区五区| 亚洲1234区| 91精品视频一区二区| 欧美中文一区二区| 欧美国产视频| 免费看黄色91| 肉色欧美久久久久久久免费看| 婷婷综合福利| 亚洲午夜精品久久久久久app| 欧美亚洲自偷自偷| 中文日韩欧美| 久久精品国语| 国产一区二区三区四区五区| 亚洲精品九九| 136国产福利精品导航网址| 国产精品一区二区三区www| 亚洲综合电影一区二区三区| 亚洲精品福利电影| 国产精品一区高清| 香蕉久久久久久| 亚洲免费高清| 一区二区小说| 日本蜜桃在线观看视频| 国产精品va| 欧美午夜网站| 日韩中文字幕视频网| 石原莉奈在线亚洲二区| 国产一在线精品一区在线观看| 另类综合日韩欧美亚洲| 日韩精品久久理论片| 尹人成人综合网| 黄在线观看免费网站ktv| 久久国产乱子精品免费女| 国产精品日韩久久久| 成人免费网站www网站高清| 久久久精品国产**网站| 国产免费久久| 午夜亚洲福利| 日韩国产在线一| 日本一区二区三区中文字幕| 久久亚洲图片| 一本色道精品久久一区二区三区| 午夜在线观看免费一区| 成人一二三区| 国产精品va视频| 一区二区亚洲视频| 日韩一区欧美二区| 日韩一级不卡| 久久国产毛片| 三级小说欧洲区亚洲区| 国产成人免费精品| 黄色在线网站噜噜噜| 亚洲综合电影| 色偷偷偷在线视频播放| 成人在线免费观看网站| 国产精品毛片一区二区在线看| 国产一区一一区高清不卡| 精品国产一区二区三区2021| 久久精品国产免费| 麻豆久久一区| 九九九精品视频| 综合日韩av| 日韩精品看片| 欧美成人基地 | 香蕉久久夜色精品国产| 激情六月综合| 国产精品91一区二区三区| 91高清一区| 婷婷成人在线| 国产视频久久| 亚洲免费成人| 亚洲精品在线二区| 国产探花一区二区| 久久中文在线| 亚洲精品**中文毛片| 国产福利电影在线播放| 成人午夜国产| 国产精品日本| 日韩中文一区二区| 国产乱子精品一区二区在线观看| 国产精品一区免费在线| 动漫av一区| 日韩深夜视频| 日韩一区二区免费看| 亚洲三级网站| 久久av免费| 久久久久久久久99精品大| 不卡中文字幕| 亚洲无线观看| 欧美aa在线视频| 国产白浆在线免费观看| 99久久精品网| 亚洲天堂日韩在线| 欧美黑人做爰爽爽爽| 欧美成a人国产精品高清乱码在线观看片在线观看久 | 99久久精品费精品国产| 手机精品视频在线观看| 国产精品嫩模av在线| 色网在线免费观看| 精品一区亚洲| 欧美久久香蕉| 欧美日韩在线观看首页| 伊人久久高清| 久久中文字幕一区二区三区| 蜜桃视频一区二区三区在线观看| 日韩一区二区三区高清在线观看| 国产精品视频一区二区三区四蜜臂 | 国产欧美高清视频在线| 亚洲黄色免费看| 亚洲免费一区三区| 精品视频网站| 老司机精品久久| 久久精品一本| 国产免费成人| 久久精品理论片| 免费视频一区二区| 加勒比视频一区| 免费精品视频最新在线| 精品国产亚洲一区二区三区| 合欧美一区二区三区| 国产麻豆精品久久| 亚洲作爱视频| 麻豆精品久久久| 天堂成人免费av电影一区| 精品视频在线一区二区在线| 国产亚洲福利| 大香伊人久久精品一区二区| 免费的成人av| 亚洲va中文在线播放免费| 日韩欧美美女在线观看| 99精品一区|