Implement strStr()
子串查找,方法很多,可以用string内置的接口find解决,这里主要复习一下kmp算法
kmp算法常用于字符串匹配,相比于传统方式一个一个查找,当遇到不匹配时从头开始的土方法,kmp可以有效减少比较次数,遇到不匹配时,不需要从头开始
判断abababc
中是否存在ababc
子串,直观上是存在的
abababc
为源字符串source
,ababc
为目标字符串target
传统方式
0 1 2 3 4 5 6 source下标
a b a b a b c source
a b a b c target
0 1 2 3 4 target下标
依次比较source[0]
和target[0]
,source[1]
和target[1]
…source[4]
和target[4]
当比较到source[4]
和target[4]
时,发现字符a和字符c不相等,此时需要从头第二个字符开始
0 1 2 3 4 5 6 source下标
a b a b a b c source
a b a b c target
0 1 2 3 4 target下标
比较source[1]
和target[0]
时就不相等,此时需要从第三个字符开始
0 1 2 3 4 5 6 source下标
a b a b a b c source
a b a b c target