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

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

java 實現KMP算法

瀏覽:23日期: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久久,三上悠亚国产精品一区二区三区
婷婷激情图片久久| 好吊日精品视频| 日韩三级视频| 国产精品xxxav免费视频| 精品国产麻豆| 久久精品91| 亚洲色图国产| 精品不卡一区| 欧美一区二区三区激情视频| 欧美va天堂在线| 在线观看视频免费一区二区三区| 日韩激情中文字幕| 国内精品麻豆美女在线播放视频| 久久久久久自在自线| 国产一区二区三区视频在线| 秋霞影视一区二区三区| 一级欧美视频| 首页国产精品| 婷婷亚洲成人| 午夜av不卡| 欧美日韩午夜| 欧美日韩中文字幕一区二区三区| 亚洲性视频在线| 九九色在线视频| 欧美日韩亚洲一区二区三区在线| 午夜精品成人av| 国产精品115| 蜜臀av亚洲一区中文字幕| 精品视频国产| 性色av一区二区怡红| 国产精品美女久久久久久不卡 | 精品一区亚洲| 国产精品成人**免费视频| 亚洲成人一区在线观看| 国产精品最新| 亚洲精品人人| 成人av二区| 精品深夜福利视频| 日韩视频一二区| 国产精品老牛| 欧美日韩第一| 色爱综合av| 鲁鲁在线中文| 国产免费久久| 日本va欧美va瓶| 在线观看亚洲精品福利片| 国产一区清纯| 国产真实久久| 久久中文字幕av| 日本不卡免费高清视频在线| 国产精品综合色区在线观看| 日韩精品视频中文字幕| 99日韩精品| 中文一区二区| 欧美精品国产| 国产精品视区| 女人天堂亚洲aⅴ在线观看| 国际精品欧美精品| 亚洲综合日本| 国产精品一二| 日韩国产在线| 日本成人一区二区| 91精品韩国| 国产精品一页| 免费不卡在线观看| 老鸭窝毛片一区二区三区| 国产一区清纯| 欧美日韩免费观看一区=区三区| 日韩中文视频| 91成人精品| 亚洲一二av| 在线一区视频观看| 国产综合婷婷| 久久精品天堂| 久久99久久久精品欧美| 欧美国产极品| 天堂中文在线播放| 午夜精品网站| 日韩不卡手机在线v区| 国产精品成人**免费视频| 国产精品一区二区三区四区在线观看| 1024精品久久久久久久久| 久久成人一区| 国产日韩欧美| 成人免费电影网址| 伊人久久大香伊蕉在人线观看热v| 亚久久调教视频| 久久久久黄色| 久久久噜噜噜| 在线一区二区三区视频| 国产极品一区| 国产视频一区三区| 青青伊人久久| 国产91精品对白在线播放| 亚洲三级精品| 成人看片网站| 国产欧美69| 激情久久中文字幕| 777久久精品| 在线日韩一区| 国产精品宾馆| 亚洲国产一区二区三区在线播放 | 日韩美女一区二区三区在线观看| 最新国产拍偷乱拍精品| 国产精品久久国产愉拍| 99在线精品视频在线观看| 另类小说一区二区三区| 欧美专区一区二区三区| 日韩成人免费| 国产精品一区三区在线观看| 久久成人精品| 亚洲高清激情| 午夜影院一区| 久久亚洲人体| 国产日韩视频| 日本不卡视频一二三区| 在线一区免费| 日韩大片在线观看| 欧美极品一区二区三区| 911精品国产| 日韩国产在线一| 亚洲啊v在线免费视频| 在线一区二区三区视频| 国产美女精品| 伊人精品久久| 日韩在线网址| 日本免费新一区视频| 一区二区国产精品| 中文在线日韩| 日本亚洲视频| 久久国产乱子精品免费女| 亚洲精品影院在线观看| 亚洲久久在线| 久久狠狠久久| 精品理论电影在线| 国产一二在线播放| 啪啪国产精品| 午夜日韩在线| 亚洲tv在线| 国产精品18| 91精品精品| 亚洲人成高清| 久久久精品区| 亚洲三级欧美| 亚洲免费婷婷| 国产精区一区二区| 在线中文字幕播放| 国产99精品一区| 最新亚洲国产| 精品欧美视频| 中文亚洲免费| 麻豆精品新av中文字幕| 亚洲黄色网址| 综合亚洲视频| 国产欧洲在线| 在线观看一区| 日韩欧美国产精品综合嫩v| 亚洲一级在线| 老司机精品视频在线播放| 亚洲欧美综合| 欧美三区不卡| 日韩视频二区| 国产精品最新自拍| 欧美日韩中文一区二区| 少妇精品久久久一区二区| 国产成人免费| 日本精品一区二区三区在线观看视频| 正在播放日韩精品| 欧美一区影院| 男人的天堂久久精品| 久久久久免费| 国产欧美一区二区三区国产幕精品| 99久久99久久精品国产片果冰| 日韩在线视频一区二区三区| 天堂av在线| 国产精品欧美在线观看| 亚洲中午字幕| 免费亚洲婷婷| 亚洲精品亚洲人成在线观看| 久久精品欧美一区| 国产激情久久| 日本午夜精品一区二区三区电影 | 亚洲欧洲美洲av| 麻豆精品在线观看| 日韩激情一区二区| 久久亚洲风情| 久久久人人人| 亚洲天堂1区| 国产高清不卡| 国产精品三级| 国产精品115| 久久精品一区二区国产| 国产精品大片| 久久免费视频66| 蜜桃久久久久| 日本一区二区高清不卡| 老司机精品视频在线播放| 免费精品一区| 亚洲一级少妇| 免费视频一区三区|