KMP模式串匹配算法
总有那么一些算法,令人感到惊叹,惊叹于算法的高效,惊叹于算法的解题思路
KMP算法是一个非常高效的模式串匹配算法,它把模式串匹配算法的时间复杂度降为了O(m+n),m是主串长度,n是模式串长度,之前对这个算法十分抗拒,因为很多文章讲得晦涩难懂,阅读了几篇相关文章后,自己尝试着写了一遍算法后,才明白其中的道理
暴力解法
对于一个字符串S"abcdeft"
,我们想知道它是否包含字符串P"def"
,首先应该想到的是准备三个指针p,q和m,p指针和q指针指向S串的开头,m指针指向P串的开头,比较q指针和m指针指向的字符,如果相同,q指针和m指针向后移动,如果m指针指向P串的末尾,并且相同,返回p指针,就是P串在S串中的位置如果不想等,p指针后移,q指向p指向的位置,m指针指向P串的开头,继续比较
int BFSearch(String s, String p) {
int ls = s.length(), lp = p.length();
for (int i = 0; i < ls - lp; i++) {
int j = 0;
while(j < lp && s.charAt(i + j<