字符串匹配-KMP
一、传统匹配。
逐个匹配,若匹配失败,文本串换下一个字符,模式串从头与其再逐个匹配.......时间复杂度O(n*m).
二、kmp匹配
若模式串第i+1位匹配失败,文本串换下一个字符,模式串从第fail[i]+1位与其逐个匹配......时间复杂度O(n).
三、fail数组
理解这个数组即理解了kmp算法
注意到最后5个字符,分别与该字符串的第0,1...4位是一样的,所以他们的fail数组也是0,1,2,3,4。
fail[i]与fail[i-1]有关。像第6位字符c,它前面的b是2
,所以他直接与第2+1位比较,发现相同,则它的fail值为2+1,否则为-1.
最后再回到匹配看看,若与最后一个q字符匹配失败,是不是可以再与第3+1位所在的字符a接着比较呢