举例:数组
已知String str = "aaab"; 其Next数组值结果为 0123。spa
已知String str = "babab"; 其Next数组值结果为 01123。ci
解析:table
坐标 | 1 | 2 | 3 | 4 |
模式串 | a | a | a | b |
NEXT数值 | 0 | 1 | 2 | 3 |
坐标 | 1 | 2 | 3 | 4 | 5 |
模式串 | b | a | b | a | b |
NEXT数值 | 0 | 1 | 1 | 2 | 3 |
NEXT数组的求解方法是:方法
第一位的next值为0,第二位的next值为1,后面求解每一位的next值时,根据前一位进行比较。首先将前一位与其next值对应的内容进行比较,若是相等,则该位的next值就是前一位的next值加上1;若是不等,向前继续寻找next值对应的内容来与前一位进行比较,直到找到某个位上内容的next值对应的内容与前一位相等为止,则这个位对应的值加上1即为需求的next值;若是找到第一位都没有找到与前一位相等的内容,那么需求的位上的next值即为1。next
计算过程:(以第二题为例)tab
计算3b (3b表示坐标为3的b):先比较3b的前一位2a,2a的NEXT值为1,将2a和坐标为1的串1b比较,不相等,由于1b是第一位,因此最终3b的NEXT值为1。di
计算4a:先比较4a的前一位3b,3b的NEXT值为1,将3b和坐标为1的串1b比较,相等,因此最终4a的NEXT值为(3b的NEXT值 + 1)= 2。ab
计算5b:同理计算4a,可得计算结果为2+1=3。