2 字串查詢

2021-08-15 13:21:34 字數 1519 閱讀 8844

kmp演算法:kmp演算法的關鍵是利用匹配失敗後的資訊,儘量減少模式串與主串的匹配次數以達到快速匹配的目的。具體實現就是實現乙個next()函式,函式本身包含了模式串的區域性匹配資訊。時間複雜度o(m+n)。

通過getnext()實現部分匹配值,然後利用kmp演算法計算是否匹配。

**如下:

package lintcode;

public class solution

public static int getnext(int lengthp, string target)

string a, b;

int j = 0, k = -1;// j為p串的下標,k用來記錄該下標對應的next陣列的值

next[0] = -1;// 初始化0下標下的next陣列值為-1

while (j < lengthp) else if (k != -1 && a.equals(target.substring(k, k + 1))) else

k = next[k];// 縮小子串的範圍繼續比較

}return next;

}public static int kmp(int k, int next, string source, string target)

system.out.println("");

string a, b;

int posp = 0, post = k;// posp和post分別是模式串pat和目標串t的下標,先初始化它們的起始位置

int lengthp = target.length();// lengthp是模式串pat長

int lengtht = source.length();// lengtht是目標串t長

a = target.substring(posp, posp + 1);

b = source.substring(post, post + 1);

while (posp < lengthp && post < lengtht)

system.out.println("a:" + a + " b:" + b + " posp" + posp + " post" + post);

if (posp == -1|| a.equals(b)) else

posp = next[posp];// 失配時,用next陣列值選擇下一次匹配的位置

}if (posp < lengthp)

return -1;

else

}public static void main(string args)

}

13 字串查詢

對於乙個給定的 source 字串和乙個 target 字串,你應該在 source 字串中找出 target 字串出現的第乙個位置 從0開始 如果不存在,則返回 1。說明在面試中我是否需要實現kmp演算法?樣例如果 source source 和 target target 返回 1。如果 sou...

1100 字串查詢

description 給定兩個字串a b,求b在a 現的位置.input 第一行為乙個字串a,長度大於等於1小於等於100000。第二行為乙個字串b,長度大於等於1小於等於1000。output 乙個整數,b在a 現的位置,若b不是a的字串,輸出 1。sample input abababc ab...

2 字串插入

描述 有兩個字串str和substr,str的字元個數不超過10,substr的字元個數為3。字元個數不包括字串結尾處的 0 將substr插入到str中ascii碼最大的那個字元後面,若有多個最大則只考慮第乙個。輸入 輸入包括若干行,每一行為一組測試資料,格式為 str substr 輸出 對於每...