kmp演算法(字串匹配問題)

2021-09-28 14:52:01 字數 871 閱讀 5159

判斷str1是否含有str2,如果存在,返回第一次出現的位置,如果不存在,返回-1

str1 = "bbc abcdab abcdabcdabde";

str2 = "abcdabd";

(1)思路步驟:

(1)先得到子串的部分匹配表

(2)根據部分匹配表(移動位數=已匹配字元數-對應的部分匹配值)完成匹配

(2)字串的字首 字尾的了解

例如:「bread」 字首:b br bre bred 字尾:read ead ad d

「a」 字首字尾都為空

「aa」 字首 a 字尾 a

字串的字首與字尾的最長的共同子串的長度,即為部分匹配表的值

a b c d a b d (例如這裡的第二個b指的是"ab" ,這裡的第二個a指的是"abcda")

0 0 0 0 1 2 0

(3)kmp演算法與暴力匹配的比較與解析

例如本例str1與str2進行匹配

**實現

package com.yues.work;

public class aaa

private static int kmpnext(string dest)

if(dest.charat(i)==dest.charat(j))

next[i]=j;

}return next;

}public static int kmpsearch(string str1,string str2,int next)

if(str1.charat(i)==str2.charat(j))

if(j==str2.length())

}return -1;

}}

字串匹配問題 KMP匹配演算法

基本思想 字串匹配問題 在文字串中尋找是否有與模式串相同的子串 在字串匹配時,暴力匹配忽略了如果模式串開頭與中間有重複部分,在將模式串的後面的重複部分匹配後,無法繼續匹配的話,此時將模式串開頭實際上也已經被匹配了,可以直接從開頭重複部分之後開始匹配 這裡引入了乙個部分匹配值表,每個與模式串的字元對應...

字串匹配問題 KMP演算法

kmp演算法 kmp是解字串匹配這類題目的演算法,又稱 看毛片 演算法。如下圖,給定乙個長度為n的文字,給定乙個長度為m 的字串,求該字串在給定文字的中出現的次數。kmp就是解決這一類題目的。i 1 zzkzzzkzzzkzkkkz zzkzzkzzkzzk j 1繼續考慮上面的問題。首先我相信每個...

字串匹配問題 KMP演算法

字串匹配問題 給定兩個字串s 主串 和t 模式串 假設n strlen s strlen t m,判斷主串s中是否包含模式t,且返回t在s中所在的起始位置。這裡為簡單起見,若s包含t,則只返回第乙個t所在的位置。一般的蠻力法如下 蠻力法在遇到不匹配時,j每次都要回到t的起點,從新開始匹配,這樣來看效...