下列算法实现求采用顺序结构存储的串S和串t的一个最长公共子串。 void maxcomstr(string*s,*t;int index,length) { int i,j,k,lengthl,con; index=0;le

admin2013-12-15  61

问题 下列算法实现求采用顺序结构存储的串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==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),则要修改最长公共子串的长度。
转载请注明原文地址:https://kaotiyun.com/show/M0al777K
0

随机试题
最新回复(0)