字符串搜索

字符串搜索是一种非常常见的应用,暴力搜索是直接去匹配各个字符,但是这种方法对于重复度较高的字符串来说,有点浪费计算了。KMP算法利用子串本身的特性,试图建立一种状态机,指出匹配到当前字符串的状态如何。http://blog.csdn.net/thesby/article/details/51243270

Next数组怎么求?

next数组的求解方法是:第一位的next值为0,第二位的next值为1,后面求解每一位的next值时,根据前一位进行比较。首先将前一位与其next值对应的内容进行比较,如果相等,则该位的next值就是前一位的next值加上1;如果不等,向前继续寻找next值对应的内容来与前一位进行比较,直到找到某个位上内容的next值对应的内容与前一位相等为止,则这个位对应的值加上1即为需求的next值;如果找到第一位都没有找到与前一位相等的内容,那么需求的位上的next值即为1。

这样的描述好像不太容易理解,我们可以直接看一个例子。
1 2 3 4 5 6 7 8
a b a a b c a c
所以,第一步的next
1 2 3 4 5 6 7 8
a b a a b c a c
0 1
第二步,看第三位的前一个是b,它与自己next位置1的字符a比较,不相等,所以他就是1了。
接下来,
1 2 3 4 5 6 7 8
a b a a b c a c
0 1 1
第三步,看第三个字符a,可见它与自己next对应的是相等的,那就是在此基础上+1,
1 2 3 4 5 6 7 8
a b a a b c a c
0 1 1 2
第四步,第四个字符的a和它对应的next位置2的b不等,所以它就是再和2位置b的next比较,此时相等了,那么就是2了,所以
1 2 3 4 5 6 7 8
a b a a b c a c
0 1 1 2 2
第五步,第五个字符b和自己对应next字符相等,所以+1,
1 2 3 4 5 6 7 8
a b a a b c a c
0 1 1 2 2 3
第六步,第六个字符c没有与前面的重复,所以第七个位置的next就是1,
1 2 3 4 5 6 7 8
a b a a b c a c
0 1 1 2 2 3 1
最后一个,看第七个是a,它对应next位置字符刚好和它相等,所以第八个next就是2了,
1 2 3 4 5 6 7 8
a b a a b c a c
0 1 1 2 2 3 1 2

参考了http://blog.csdn.net/quitepig/article/details/7933977

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值