下列算法实现求采用顺序结构存储的串S和串t的一个最长公共子串。 void maxcomstr(string*s *
下列算法实现求采用顺序结构存储的串S和串t的一个最长公共子串。 void maxcomstr(string*s,*t;int index,length) { int i,j,k,lengthl,con; index=0;length=0;i=1; while(i<=strlen(s)) { j=1; while(j<=strlen(t)) { if(s[i]==t[j] { k=1;lengthl=1;con=1; while(con) if((1)) { lengthl=lengthl+1;k=k+1; } else (2) ; if(lengthl>length) {index=i;length=lengthl;} (3); } else (4); } (5); } }
请帮忙给出正确答案和分析,谢谢!
-
正确答案:(1)i+k<=s.len&&j+k<=t.len&&s[i+k]==t[j+k]//如果在s和t的长度内对应字符相等则指针k后移(加1) (2)con=0//s和t对应字符不相等时置标记后退出 (3)j+=k//在t串中从第j+k字符起与s[i]比较 (4)j++//t串取下一字符 (5)i++//s串指针i后移(加1)
本题程序求采用顺序存储结构存储的串S和串t的最大公共子串。串s用i指针(1≤i≤s.len),串t用j指针(1≤j≤t.len)。算法思想是对每个i(1≤i≤s.len,即程序中第一个while循环),求从i开始的连续字符串与从j(1≤j≤t.len,即程序中第二个while循环)开始的连续字符串的最大匹配。程序中第三个(即最内层)while循环是当S中某字符(s[j])与t中某字符(t[j])相等时,求出局部公共子串。若该子串长度大于已求出的最长公共子串(初始为0),则要修改最长公共子串的长度。
