已知某字符串,求Next数组值

举例:

已知String str = "aaab"; 其Next数组值结果为  0123。

已知String str = "babab"; 其Next数组值结果为  01123。

解析:

坐标1234
模式串aaab
NEXT数值0  123

 

坐标12345
模式串babab
NEXT数值01123

NEXT数组的求解方法是:

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

计算过程:(以第二题为例)

    计算3b (3b表示坐标为3的b):先比较3b的前一位2a,2a的NEXT值为1,将2a和坐标为1的串1b比较,不相等,因为1b是第一位,所以最终3b的NEXT值为1。

    计算4a:先比较4a的前一位3b,3b的NEXT值为1,将3b和坐标为1的串1b比较,相等,所以最终4a的NEXT值为(3b的NEXT值 + 1)= 2。

    计算5b:同理计算4a,可得计算结果为2+1=3。

转载于:https://my.oschina.net/miwang/blog/1613122

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值