給定兩個字串s、p,如何判斷s中包含p?(假設s為較長字串,要求p中字元在s中要連續出現)
這就是經典的字串匹配問題。暴力匹配略去不說,一種較好的解法就是kmp。對於乙個新手來說,想學習kmp,建議看如下兩篇文章:
從頭到尾徹底理解kmp(2023年8月22日版)
如果對第二篇中next陣列的講解不是很懂的話,建議看這篇
int getnext(char *p, intnext)
k++;
j++;
next[j] =k;
}return0;
}void kmp(char *s, char *p)
i++;
j++;
if (j ==plen)
}delete next; //
do not forget
}
分析:如果文字串的長度為n,模式串的長度為m,那麼匹配過程的時間複雜度為o(n),算上計算next的o(m)時間,kmp的整體時間複雜度為o(m + n)。
reference:
字串匹配之KMP演算法
以前零零散散做了些kmp的題目,一直也沒找出時間整理,這一段又開始研究字串了,就順便把kmp整理了一下。廢話不說了,我們直接入題。說到kmp,首先應該知道,它是一種字串查詢演算法,因為是由乙個姓k,乙個姓m和乙個姓p的人聯合發表的,所以就叫kmp演算法了。kmp演算法是一種線性時間的的字串匹配演算法...
演算法 字串匹配之KMP
說人話就是 比如有乙個字串 bbc abcdab abcdabcdabde 我想知道,裡面是否包含另乙個字串 abcdabd 許多演算法可以完成這個任務,kmp演算法是最常用的之一。首先對於上面的 比如 我們首先要針對搜尋詞 abcdabd 算出一張 部分匹配表 接下來就很簡單了,將字串和搜尋詞都從...
字串匹配之KMP演算法
問題定義 字串匹配即是在所有文字t中,找出模式p的所有出現。字串匹配常用的演算法有 樸素演算法 rabin karp演算法 有限自動機演算法 kmp演算法 所有演算法中,算kmp演算法效率最高。也較為難理解。作者曾經認真看了3遍嚴蔚敏的 資料結構 遺憾的是沒有看懂,搞得我一度懷疑自己的智商很低。今天...