这篇文章不错
注意:
上面这个链接不是原创,
原创在
博客园那个排版比较好,但某些地方没有链接,图片也少了些
这篇貌似更详细一些
第一篇
不错
尤其是
把一维数组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
后面把左右串混来混去
改了一阵,干脆把参数名改为左右
总是改好了
代码规范重要啊