我目前正在尝试查找和打印2个给定字符串的最长公共子序列。我使用最常用的算法,无需递归。如果我保留整个数组,这很简单,但我想优化一下,只使用2行,你可以在下面的代码中看到。随着这一变化,找到长度仍然简单,工作正常,但恢复子序列不再那么容易。我试图用几种方法做,但都没有成功。下面你可以看到我的最后一次尝试。虽然它适用于相同的情况,但也有失败的情况。经过很长时间的思考,我开始相信,没有办法使用只有2行的数组恢复子序列。我的研究没有给我确切的答案,所以我问是否有办法实现我想要做的事情?或者我坚持保持整个阵列,如果我想打印?最长公共子序列优化
//finding length of longest common subsequence
for(int i=1; i<m; i++) {
for(int j=1; j<n; j++) {
if(sequece1[i-1] == sequence2[j-1]) {
tab[i%2][j] = tab[(i-1)%2][j-1] + 1;
} else {
tab[i%2][j] = max(tab[i%2][j-1],tab[(i-1)%2][j]);
}
}
}
//trying to reconstruct longest common subsequence
int last_row = (m-1)%2;
for(int j=n-1; j>0; j--) {
if(tab[last_row][j-1] < tab[last_row][j]) {
if(last_row == 0) {
common_part += sequence2[j];
} else {
common_part += sequence2[j-1];
}
}
}
[http://en.wikipedia.org/wiki/Longest_common_subsequence_problem](http://en.wikipedia.org/wiki/Longest_common_subsequence_problem)这会帮助你。 –