2019独角兽企业重金招聘Python工程师标准>>>
在字符串S(string)中找到匹配的字符串P(pattern)
第一种想法:// 利用最简单的循环结构
for(m=0; m<...;m++) // m -> start position
for(i=0; i<...; i++) // offset from m
if(S[m+i] == P[i])....
else ....
------------------------------------------------------------------------------------------------------------------------------
第二种:KMP算法
------------------------------------------------------------------------------------------------------------------------------
我遇到不懂得术语总会先百度一下,然后再在维基上找资料,那么我们也以它上面的例子作为我这个分析方法的实践:
S: ABC ABCDAB ABCDABCDABDE
P: ABCDABD
Step 1: m=0, i=3 出现不匹配,形成临时字符串 ABC,明显首尾完全不同,p = 0,m = m + i - p, m = 3;
Step 2: m=3, i=0, p=-1(如果还是0就停在那个位置了,所以用了一个技巧,使之向右移动一位), m = 4;
Step 3: m=4,i=6, "ABCDAB", p=2, m=4+6-2=8;
Step 4: m=8,i=3, "AB", p=0, m=11;
Step 5: m=11,i=6,"ABCDAB", p=2, m=15;
Step 6: m=15,i=6, 找到匹配的了!如果还想找下一个,令 m = m + i ,重复这样的步骤即可,注意将这些位置保存起来,比如第一个匹配到的字符串位置是 15 !