那不妨就用第0个字符串来取得从第strlen(str[0])-minBackwards到第strlen(str[0])-1个就行了。如下是我的代码: #include <stdio.h> #include <string.h> #define MAXLENGTH 200 // 比较两个字符串的最长后缀 int compareSuffix(char a[], char b[]) { int len_a, len_b; len_a = strlen(a);...
对于wordsQuery[0]=“cd”,wordsContainer中有最长公共后缀"cd"的字符串下标分别为0,1和2。这些字符串中,答案是下标为1的字符串,因为它的长度为3,是最短的字符串。 对于wordsQuery[1]=“bcd”,wordsContainer中有最长公共后缀"bcd"的字符串下标分别为0,1和2。这些字符串中,答案是下标为1的字符串,因为它的...
KMP再思考:为什么要⽤最长公共前后缀,为什么要⽤公共前后缀1.如果不⽤最长的,则会丢失可匹配部分,也就是本来可能匹配的,结果却不能匹配。2.因为需要保证⽐较位置之前的字符串都⼀致了,如果不⽤公共前后缀,则可能导致⽐较位置之前的字符串不⼀致。理由其实很简单,因为把前缀移到后缀的位置,...
for(int i=n-1;i>=0;--i)sa[ --c[ wx[i] ] ]=i; for(int k=1;k<=n;k<<=1) { int p=0; FOR(i,n-k,n-1)wy[p++]=i; FOR(i,0,n-1)if(sa[i]>=k)wy[p++]=sa[i]-k; FOR(i,0,m-1)c[i]=0; FOR(i,0,n-1)++c[ wx[ wy[i] ] ]; FOR(i,1,m-1)c[i]...