设有字符串a[0...n],b[0...m],下面就是递推公式。字符串a对应的是二维数组num的行,字符串b对应的是二维数组num的列。
//代码实现比较简单,可能有问题
#include <iostream>
#include <string>
using namespace std;
int main(int argc, char **argv)
{
string str1 = "ABCBDABEFG";
string str2 = "BDCABAEFG";
int x_len = str1.length();
int y_len = str2.length();
int arr[50][50] = {{0,0}};
int i = 0;
int j = 0;
for(i = 1; i <= x_len; i++)
{
for(j = 1; j <= y_len; j++)
{
if(str1[i - 1] == str2[j - 1])
{
arr[i][j] = arr[i - 1][j - 1] + 1;
}
else
{
if(arr[i][j - 1] >= arr[i - 1][j])
{
arr[i][j] = arr[i][j - 1];
}
else
{
arr[i][j] = arr[i -1][j];
}
}
}
}
for(i = 0 ; i <= x_len; i++)
{
for( j = 0; j <= y_len; j++)
{
cout << arr[i][j] << " ";
}
cout << endl;
}
for(i = x_len, j = y_len; i >= 1 && j >= 1;)
{
if(str1[i - 1] == str2[j - 1])
{
cout << str1[i - 1] << " ";//倒序打印的
i--;
j--;
}
else
{
// if(arr[i][j -1] >= arr[i - 1][j])//打印:B A D B
if(arr[i][j -1] > arr[i - 1][j]) //打印:A B C B
{
j--;
}
else
{
i--;
}
}
}
cout << endl;
return 0;
}