KMP思想
找到当前串满足 长度为k的前缀和后缀完全相同 的最大的k
精髓就在于next数组 next数组存的是上述的k
1 int i, k = 0; 2 next[0] = next[1] = 0; 3 for(i = 1; i < len2; i++){ 4 while(k > 0 && s2[k] != s2[i])k = next[k]; 5 if(s2[k] == s2[i]) k++;//考虑到k==0或第一次进入循环都需要这一次判定 6 next[i + 1] = k; 7 }
与目标串匹配
1 k = 0; 2 for(i = 0; i < len1; i++){ 3 while(k > 0 && s2[k] != s1[i])k = next[k]; 4 if(s2[k] == s1[i]) k++; 5 if(k == len2) printf("%d ", i - k + 2); 6 }
相关题目: