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 輸出 對於每...