数据结构 study 14 KMP(1):

主串:S =
ababcabcacbab
子串:T =
abcac

[jack@jack-desktop: ch4]$./mapp4-1-2
S =
ababcabcacbab
T =
abcac
pos = 1
S[0]= 13
T[0]= 5
a    b    a    b    c    a    b    c    a    c    b    a    b
i=1
a    b    c    a    c
j=1


-------------------


S[1]=a,T[1]=a
1    2    3    4    5    6    7    8    9    10   11   12   13
a    b    a    b    c    a    b    c    a    c    b    a    b
i=1
a
j=1

S[2]=b,T[2]=b
1    2    3    4    5    6    7    8    9    10   11   12   13
a    b    a    b    c    a    b    c    a    c    b    a    b
     i=2
a    b
     j=2

S[3]=a,T[3]=c
1    2    3    4    5    6    7    8    9    10   11   12   13
a    b    a    b    c    a    b    c    a    c    b    a    b
          i=3
a    b    c
          j=3

S[2]=b,T[1]=a
1    2    3    4    5    6    7    8    9    10   11   12   13
a    b    a    b    c    a    b    c    a    c    b    a    b
     i=2
     a
     j=1

S[3]=a,T[1]=a
1    2    3    4    5    6    7    8    9    10   11   12   13
a    b    a    b    c    a    b    c    a    c    b    a    b
          i=3
          a
          j=1

S[4]=b,T[2]=b
1    2    3    4    5    6    7    8    9    10   11   12   13
a    b    a    b    c    a    b    c    a    c    b    a    b
               i=4
          a    b
               j=2

S[5]=c,T[3]=c
1    2    3    4    5    6    7    8    9    10   11   12   13
a    b    a    b    c    a    b    c    a    c    b    a    b
                    i=5
          a    b    c
                    j=3

S[6]=a,T[4]=a
1    2    3    4    5    6    7    8    9    10   11   12   13
a    b    a    b    c    a    b    c    a    c    b    a    b
                         i=6
          a    b    c    a
                         j=4

S[7]=b,T[5]=c
1    2    3    4    5    6    7    8    9    10   11   12   13
a    b    a    b    c    a    b    c    a    c    b    a    b
                              i=7
          a    b    c    a    c
                              j=5

S[4]=b,T[1]=a
1    2    3    4    5    6    7    8    9    10   11   12   13
a    b    a    b    c    a    b    c    a    c    b    a    b
               i=4
               a
               j=1

S[5]=c,T[1]=a
1    2    3    4    5    6    7    8    9    10   11   12   13
a    b    a    b    c    a    b    c    a    c    b    a    b
                    i=5
                    a
                    j=1

S[6]=a,T[1]=a
1    2    3    4    5    6    7    8    9    10   11   12   13
a    b    a    b    c    a    b    c    a    c    b    a    b
                         i=6
                         a
                         j=1

S[7]=b,T[2]=b
1    2    3    4    5    6    7    8    9    10   11   12   13
a    b    a    b    c    a    b    c    a    c    b    a    b
                              i=7
                         a    b
                              j=2

S[8]=c,T[3]=c
1    2    3    4    5    6    7    8    9    10   11   12   13
a    b    a    b    c    a    b    c    a    c    b    a    b
                                   i=8
                         a    b    c
                                   j=3

S[9]=a,T[4]=a
1    2    3    4    5    6    7    8    9    10   11   12   13
a    b    a    b    c    a    b    c    a    c    b    a    b
                                        i=9
                         a    b    c    a
                                        j=4

S[10]=c,T[5]=c
1    2    3    4    5    6    7    8    9    10   11   12   13
a    b    a    b    c    a    b    c    a    c    b    a    b
                                             i=10
                         a    b    c    a    c
                                             j=5
j = 6, T[0]=5, i=11
Index return i = 6

i=7的时候,j=5 失配

此时 应该选择从 子串中选择
j=2 继续比较
按照 公式的说法:
在这里插入图片描述
在这里插入图片描述
i=7
j=5
k=2

k-1 = 1
i-1 = 6
i-k+1 = 7-2+1 = 6
在这里插入图片描述
p1 = s6 = a

j-k+1 = 5-2+1 = 4
j-1 = 4
在这里插入图片描述
p4 = s6 = a
在这里插入图片描述
p1 = p4 =a
在这里插入图片描述

在这里插入图片描述
s = 主串
p = 子串

当 j =1 的时候,s[i] 不等于 a, p[1] = a
k=0,
那么 i=i+1

当j=2的时候,s[i]不等于 b,s[i-1]=a, p[1]=a ,p[2] = b
那么 k=1
此时 s[i] 继续和 p[1] =a 比较,看s[i] 是否等于 p[1]
如果s[i] 不等于a
那么 i = i+1 ,j = 1

如果s[i] = a,
那么 i=i+1, j=j+1
继续比较
在这里插入图片描述

当 j=3 的时候 ,s[i]不等于a,
s[i-2] =a, s[i-1] = b,
k =1
s[i] 与p[1] = a
比较

当j4 的时候,s[i] 不等于a
s[i-3]=a,
s[i-2]=b,
s[i-1]=a

k=2

s[i] 与 p[2] =b,继续比较

在这里插入图片描述
c 前面的 ab a ab
其中的
前面ab 和 后面的ab 重合,
就不用继续比较了

到某个位置不匹配的时候,就观察 他前面的 字符串
开头是否与末尾的,有重合,有重合 就跳过

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值