学习:字符串----KMP算法
KMP算法 是判断一个字符串 (模式串) 是不是另一个字符串 (文本串) 的子串的常用算法,其中KMP算法的失配指针的概念(在本算法也叫 next数组 )在AC自动机中也有突出使用。 朴素的字符串匹配算法 朴素的字符串匹配算法,即判断文本串的 以每一个字符为开头,与模式串等长的子字符串 是否与 模式串 本身相等。很明显复杂度为为 O(mn),其中m为文本串的长度,n为模式串的长度。具体实现如下图 上图是一个字符串朴素匹配的示意图,长度为4的模式串与文本串每一个连续的长度为4的子串进行匹配判断,每一次匹配判断都需要一个个字符比较。 朴素匹配的代码: int StringMatch(string s, string p){ //s为文本串,p为模式串 int sLen = s.size(); int pLen = p.size(); int i = 0; //i遍历文本串下标,j遍历模式串下标 int j = 0; while (i < sLen && j < pLen){ if (s[i] == p[j]){ //相同i和j一起加1 i++; j++; } else{ i = i - j + 1; //i指向文本串下一个子串的第一个字符。 j = 0; //不相同,j重新指向模式串第一个字符 } } if (j == pLen) return i - j; else return