if(A[i}==B[-])k++ else k=0 if(k>maxlen) lpsl=j-k+1; lps2-j-i-k+l; maxlen=k if(maxlen) if(S[OP=TOD lps s=psl; pst=Ip else Ipss=lps2: psT=lps l }/将A,B上的位置映射回S,T上的位置 printf("Longest Public Substring length: %d\n", maxlen); printf("Position in S: %d Position in T: %d\n",pss, IpsT); else printf("No Repeating Substring found! \ n") i//Get LPubSub 分析本题基本思路与上题同唯一的区别是由于A,B互不相同因此B不仅要向 右错位,而且还要向左错位,以保证不漏掉一些情况当B相对于A的位置不同时 需要匹配的区间的计算公式也各不相同,请读者自己画图以帮助理解本算法的时 间复杂度是o( strlen(s)* strlen(t))。{ if(A[j]==B[j-i]) k++; else k=0; if(k>maxlen) { lps1=j-k+1;lps2=j-i-k+1;maxlen=k; } }//for }//for if(maxlen) { if(S[0]>=T[0]) { lpsS=lps1;lpsT=lps2; } else { lpsS=lps2;lpsT=lps1; } //将 A,B 上的位置映射回 S,T 上的位置 printf("Longest Public Substring length:%d\n",maxlen); printf("Position in S:%d Position in T:%d\n",lpsS,lpsT); }//if else printf("No Repeating Substring found!\n"); }//Get_LPubSub 分析:本题基本思路与上题同.唯一的区别是,由于 A,B 互不相同,因此 B 不仅要向 右错位,而且还要向左错位,以保证不漏掉一些情况.当 B 相对于 A 的位置不同时, 需要匹配的区间的计算公式也各不相同,请读者自己画图以帮助理解.本算法的时 间复杂度是 o(strlrn(s)*strlen(t))