Next函数讲解:
Next函数:指当子串与母串在子串第j个字符(母串第i个字符)时出现了不匹配。如果不让母串指针i回溯,只让子串指针j回溯,此时i指针指向的母串字符应该与子串中第next[j]个字符进行匹配。因此next[j]就是当子母串不匹配后,子串指针j会指向子串中第几个字符,而这里的第几个就是第j个。
下面分情况讲解:
当j=1时,即如果当j=1时字母就不匹配,此时指针j会指向子串中第几(next[j])个字符?我们知道前提是如果不匹配母串指针i是不变的还是指向不匹配的这个字符,因为子串的一个字符就不同所以从子串第i个字符开始的字符串指定与子串不匹配,又因为母串中第i个字符之前的字符都已经进行了匹配都不合格。所以子母串指针i与j都要往后移一位。子串中没有匹配的字符串所以记录该值为0,至于其他数行不行,我认为只要是非正数应该都可以,这里的0,只是个子母串不匹配的标志位。
当子串第j个字符与母串第i个字符不匹配时,就要分情况了。
如果子串除第j个字符外的前j-1个字符中,如果有以下这种情况,即子串前k-1个字符串与后k-1个字符串(后k-1个字符是到第j-1个字符而不是第j个字符)完全匹配则此时子串指针j就要回溯到子串中第k个字符与母串指针i指向的母串字符进行匹配判断。
如果子串前j-i个字符中不满足,则子串指针j回溯到第1(即next[j]=1)个字符与母串指针指向的母串字符进行匹配判断。