数据结构的问题,代码不明白为什么,求解惑
程序代码:
SqString* MaxSubstr(SqString s) { SqString *sp; int index=0,length=0,length1,i=0,j,k; while(i</s.length) </s.length)
SqString* MaxSubstr(SqString s) { SqString *sp; int index=0,length=0,length1,i=0,j,k; while(i<s.length) { j=i+1; while(j<s.length) { if(s.data[i]==s.data[j]) { length1=1; for(k=1;s.data[i+k]==s.data[j+k];k++)//如果相同就继续朝后面找,这里明白 length1++; if(length<length1)//这里也明白 { length=length1; index=i; } j+=length1; //为什么?为什么不是直接break跳出来,然后从i+1继续找? 为什么要从这个重复出继续朝后面呢? //我感觉这里并没有太大意义,和直接跳出去没有太大区别,是我理解错了吗??????? } else j++;//这里也是这样,为什么呢?都已经不和i连在一起了,还怎么看重复呢? } i++; } sp=(SqString*)malloc(sizeof(LiString)); sp->length=length; for(i=0;i<length;i++) sp->data[i]=s.data[i+index]; return sp; }
while(j<s.length) { if(s.data[i]==s.data[j]) { length1=1; for(k=1;s.data[i+k]==s.data[j+k];k++) length1++; if(length<length1) { length=length1; index=i; } j+=length1; } else j++;//为什么还要循环?不是已经不连续了吗?i并没有改变的。 } i++; } sp=(SqString*)malloc(sizeof(LiString)); sp->length=length; for(i=0;i<length;i++) sp->data[i]=s.data[i+index]; return sp; }