还是以这串数组为例,并且默认next[1]=0,next[2]=1。下面开始分析: next[1] = 0 ,默认值 next[2] = 1 ,默认值 next[3] = 1,即"ab",前缀是"a",后缀是"b",没有最长重复子串,next[3]=0+1; next[4] = 2 ,即"aba",前缀是"ab",后缀是"ba",都有最长重复子串“a",next[4]=1+1; next...
intString::kmpFind(constString&t,intpos){//不允许申请大小为0的数组if(t,curLength==0)return0;//如果主串比子串小,匹配失败if(t.curLength<t.curLength)return-1;//主串指针i,子串指针jinti=0,j=0;int*next=newint[t.curLrngth];getNext(t,next);while(i<curLength&&j<t,curLength){if(j=...
i=4时,子串“aabaa”,其中 [aa]baa aab[aa] 最长的相同真前后缀为aa,prefix[4]=2 i=5时,子串“aabaaa”,其中[aa]baaa aaba[aa] 最长的相同真前后缀为aa,prefix[5]=2 i=6时,子串“aabaaab”,其中[aab]aaab aaba[aab]最长的相同真前后缀为aab,prefix[6]=3 上文匹配的prefix数组如下:...
设目标串S=“abccdcdccbaa”,模式串T=“cdcc”,则匹配成功的趟数为()。 A.5 B.6 C.7 D.4 查看答案
设串s为“aaab”,串t为”abcabaa”,串r为“ahcaabbabcabaacbacba”,试分别计算它们的next数组的值。 点击查看答案 第7题 设串s1="Data Structures、with Java",s2="it",则子串定位函数index(s1,s2)的值为()A.15B.16C.17D 设串s1="Data Structures、with Java",s2="it",则子串定位函数index(s1,...
string a ="aabbabaa";computer_overlay(a);system("pause");return0; } 这样我们就得到了next数组(overlay[])。 next[]的意义在于,我们在朴素算法中匹配失败时,需要将ti降到即ti-pi+1的位置上去,并且将pi降低到0。 现在,我们根本不需要这么做,将pi降低到index[pi]就可以了。
我们定义数组prefix,其中prefix[i]表示以S.charAt(i)为结尾的即S[0..i]中最长的相同真前后缀的长度。以字符串“aabaaab”为例: i=0时,子串“a”无真前后缀,prefix[0]=0 i=1时,子串“aa”,其中[a]a和a[a]最长的相同真前后缀为a,prefix[1]=1 ...
int String::kmpFind(constString&t,int pos){//不允许申请大小为0的数组if(t,curLength==0)return0;//如果主串比子串小,匹配失败if(t.curLength<t.curLength)return-1;//主串指针i,子串指针jint i=0,j=0;int*next=newint[t.curLrngth];getNext(t,next);while(i<curLength&&j<t,curLength){if...