这篇文章不错
注意:
上面这个链接不是原创,
原创在
博客园那个排版比较好,但某些地方没有链接,图片也少了些
这篇貌似更详细一些
第一篇
不错
尤其是
把一维数组c[]当二维数组来用
这个很巧妙,
程序更简洁
而且没有影响可读性
自己实现了下
把一维数组c[]当二维数组来用
其实是在形成矩阵时,先形成最左边的一列,然后依次生成右边的列
所以对串2是从尾部开始遍历,因为这样才能利用
本来在矩阵中位于左上角的元素
真是巧妙啊
char *LCS(char left[], char right[])
{
int start,end, len;
int rightLen = strlen(right);
int leftLen = strlen(left);
int *c = new int[rightLen];
int i,j;
end = len = 0;
for(i = 0; i < leftLen; i++)
{
for(j = rightLen-1; j >= 0; j--)
{
if(left[i] == right[j])
{
if(i == 0 || j == 0)
c[j] = 1;
else
c[j] = c[j-1]+1;
}
else
c[j] = 0;
if(c[j] > len)
{
len = c[j];
end = j;
}
}
}
start = end-len+1;
char *p = new char[len+1];
for(i = 0; i < len; i++)
p[i] = right[start++];
p[i] = '\0';
return p;
}
void main()
{
char str1[M] = "banana";//"21232523311324";
char str2[M] = "bnanc";//312123223445";
//printf("请输入字符串1:");
//gets(str1);
// printf("请输入字符串2:");
//gets(str2);
//printf("最长子串为:");
char *p = LCS(str1,str2);
printf("%s\n",p);
delete[] p;
}
在实现的时候遇到没有一次编写成功
主要是一开始把两个参数命名为a,b
后面把左右串混来混去
改了一阵,干脆把参数名改为左右
总是改好了
代码规范重要啊