KMP算法(子串包含问题)
问题:给你两个字符串A和B,问B是否为A的子串(A是否包含B)。比如,字符串A="abcdgo",字符串B="dgo",我们就说B是A的子串。假如,A="abababaababacb",B="ababacb",我们来看看KMP是怎么工作的。我们用两个下标i和j分别表示A和B的当前比较位置,其中A[i-j+1..i]与B[0..j-1]完全匹配。也就是说,i不断增加,随着i的增加j相应地变化,且j满足以A[i-1]结尾的长度为j的字符串正好匹配B串的前 j个字符(j当然越大越好),现在需要检验A[i]和B[j]的关系。当A[i]=B[j]时,i和j各加一;什么时候j=m(B的长度)了,我们就说B是A的子串,并且可以根据这时的i值算出匹配的位置。当A[i+1]<>B[j+1],KMP的策略是调整j的位置 (减小j值为j’+1)使得A[i-j’..i]与B[0..j’];然后继续检查A[i]和新的B[j]是否相等。我们看一看当 i = j = 5时的情况: i = 0 1 2 3 4
...