LCS递归结构:
递归实现:
#include<iostream>
#include<algorithm>
using namespace std;
string a, b;
int LCSR(int m, int n)
{
if (m == a.length() || n == b.length())
return 0;
if (a[m] == b[n])
return LCSR(m + 1, n + 1) + 1;
else
return max(LCSR(m, n + 1), LCSR(m + 1,n));
}
int main()
{
a = "original";
b = "initial";
cout << LCSR(0,0)<< endl;
}
动态规划实现:
#include<iostream>
#include<algorithm>
using namespace std;
string a, b;
int dp[100][100] = { 0 };
void LCS(string s1, string s2)
{
int i, j;
for( i = 1;s1[i];i++)
for ( j = 1;s2[j]; j++)
{
if (a[i] == b[j])dp[i][j] = dp[i - 1][j - 1] + 1;
else dp[i][j] = max(dp[i][j - 1], dp[i - 1][j]);
}
cout << dp[i - 1][j - 1] << endl;
}
int main()
{
a = "original";
b = "initial";
LCS(a, b);
}
输出结果: