DFA KMP字元匹配

2021-10-14 20:45:01 字數 2071 閱讀 1240

public class dfaandkmp 

curword += document.charat(i);

mapcurmap = (map) curobj;

if (curmap.size() == 0)

// 最小匹配則直接返回結果

if (matchtype == 0)

curwordmap = wordmap;

curword = "";

// 開始下乙個字元的匹配

i = n++;

curwordmap = curmap;}}

return matchres;

}/**

* 利用kmp演算法查詢字元匹配次數

* @param document 查詢文件

* @param matchtype 匹配規則:0最小規則,1最大規則

* @return

*/public static int kmpsearch(string document, string keyword, int matchtype)

}// 繼續匹配下乙個字元

j++;

i++;

continue;

} else

// 使用kmp部分匹配值進行移動,然後重新開始匹配

int kmpvalue = getkmpvalue(keyword.substring(0, j));

curnext += (j - kmpvalue);

i = curnext + kmpvalue;

j = kmpvalue;}}

return matchcount;

}/**

* 構造關鍵字map

*/private static mapcreatewordmap(setkeywords) else

// 最後乙個字元,設定為空map

if (i == keyword.length() - 1)

}});

return keywordsmap;

}/**

* 獲取kmp部分匹配值

* @return

*/private static int getkmpvalue(string partmatch)

// 字首集合(除了最後乙個字元以外,乙個字串的全部頭部組合)

setprefix = new hashset<>();

// 字尾集合(指除了第乙個字元以外,乙個字串的全部尾部組合)

setsuffix = new hashset<>();

// 獲取字首集合、字尾集合

int length = partmatch.length();

for (int i = 0; i < length; i++)

}// 獲取部分匹配值("字首"和"字尾"的最長共有元素的長度)

prefix.retainall(suffix);

if (prefix.size() <= 0)

int value = prefix.stream()

.max(comparator.comparingint(string::length))

.get()

.length();

return value;

}public static void main(string args) ;

string document = "此次電結他開始,電結他開始做電影視節日計費電影視節";

mapstringintegermap = dfasearch(document, new hashset<>(arrays.aslist(keyworks)), 1);

system.out.println("dfa匹配結果:" + stringintegermap);

string kmptest = "abcdabfabcdabcdabdeabcdabdabc";

int count = kmpsearch(kmptest, "abcdabdeee", 1);

system.out.println("kmp匹配次數:" + count);

}}

KMP字元匹配

在kmp 中,主要是尋找模式字串的字首和字尾的最長的共有元素的長度。以 abcdabd 為例,a 的字首和字尾都為空集,共有元素的長度為0 ab 的字首為 a 字尾為 b 共有元素的長度為0 abc 的字首為 a,ab 字尾為 bc,c 共有元素的長度0 abcd 的字首為 a,ab,abc 字尾為...

KMP字元匹配

kmp 演算法是在 s中查詢子串 p,如果存在,返回這個子串的起始索引,否則返回空列表輸入 文字串s bbc abcdab abcdabcdabde 模式串p abcdabd 輸出 15 解釋 起始索引等於 15 長度為 7 的子串是 abcdabde s abcdabcdabd p abcdabd...

正則匹配字串無匹配不到 字串匹配演算法

我們先說下定義,比如說我們要在a字串中查詢字串b,那麼a就是主串,b就是模式串 我們把主串的長度記為n,把模式串的長度記為m,n m bf brute force 中文名 暴力匹配演算法,樸素匹配演算法 簡單的說bf的演算法就是在主串中查詢起始位置是0,1,2,n m個且長度為m的n m 1個子串,...