日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 >

《漫画算法2》源码整理-4 字符串匹配算法 RK KMP

發布時間:2025/3/21 43 豆豆
生活随笔 收集整理的這篇文章主要介紹了 《漫画算法2》源码整理-4 字符串匹配算法 RK KMP 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

RK算法

public class RabinKarp {public static int rabinKarp(String str, String pattern) {//主串長度int m = str.length();//模式串的長度int n = pattern.length();//計算模式串的hash值int patternCode = hash(pattern);//計算主串當中第一個和模式串等長的子串hash值int strCode = hash(str.substring(0, n));//用模式串的hash值和主串的局部hash值比較。//如果匹配,則進行精確比較;如果不匹配,計算主串中相鄰子串的hash值。for (int i = 0; i < (m - n + 1); i++) {if ((strCode == patternCode) && compareString(i, str, pattern)) {return i;}//如果不是最后一輪,更新主串從i到i+n的hash值if (i < (m - n)) {strCode = nextHash(str, strCode, i, n);}}return -1;}private static int hash(String str) {int hashcode = 0;//這里采用最簡單的hashcode計算方式://把a當做1,把b當中2,把c當中3.....然后按位相加for (int i = 0; i < str.length(); i++) {hashcode += (str.charAt(i) - 'a');}return hashcode;}private static int nextHash(String str, int hash, int index, int n) {hash -= (str.charAt(index) - 'a');hash += (str.charAt(index + n) - 'a');return hash;}private static boolean compareString(int i, String str, String pattern) {String strSub = str.substring(i, i + pattern.length());return strSub.equals(pattern);}public static void main(String[] args) {String str = "aacdesadsdfer";String pattern = "adsd";System.out.println("第一次出現的位置:" + rabinKarp(str, pattern));} }

KMP算法

public class KMP {// KMP算法主體邏輯。str是主串,pattern是模式串public static int kmp(String str, String pattern) {//預處理,生成next數組int[] next = getNexts(pattern);int j = 0;//主循環,遍歷主串字符for (int i = 0; i < str.length(); i++) {while ((j > 0) && (str.charAt(i) != pattern.charAt(j))) {//遇到壞字符時,查詢next數組并改變模式串的起點j = next[j];}if (str.charAt(i) == pattern.charAt(j)) {j++;}if (j == pattern.length()) {//匹配成功,返回下標return i - pattern.length() + 1;}}return -1;}// 生成Next數組private static int[] getNexts(String pattern) {int[] next = new int[pattern.length()];int j = 0;for (int i = 2; i < pattern.length(); i++) {while ((j != 0) && (pattern.charAt(j) != pattern.charAt(i - 1))) {//從next[i+1]的求解回溯到 next[j]j = next[j];}if (pattern.charAt(j) == pattern.charAt(i - 1)) {j++;}next[i] = j;}return next;}public static void main(String[] args) {String str = "ATGTGAGCTGGTGTGTGCFAA";String pattern = "GTGTGCF";int index = kmp(str, pattern);System.out.println("首次出現位置:" + index);} }

總結

以上是生活随笔為你收集整理的《漫画算法2》源码整理-4 字符串匹配算法 RK KMP的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。