比较简单的分治问题。只需考虑三种情况。
一是字符串为空的情况
二是字符串末尾相同的情况
三是字符串末尾不相同的情况,则需要分治:
1.将a字符串的末尾去掉,再与b进行比较得到结果1。
2.将b字符串的末尾去掉,与a进行比较的到结果2。
最后返回两个结果中较大一个即可。
是比较典型的递归算法。
#include <iostream>
#include <string>
using namespace std;
int max(int a, int b)
{
return a > b ? a : b;
}
int LCS(string a, string b)
{
string a1, b1, a2, b2;
int m = a.length();
int n = b.length();
if (n==0||m==0)
{
return 0;
}
if (a[m-1]==b[n-1])
{
a1 = a.substr(0,m - 1);
b1 = b.substr(0,n - 1);
return LCS(a1, b1)+1;
}
else
{
a1 = a;
b1 = b.substr(0,n - 1);
a2 = a.substr(0,m - 1);
b2 = b;
return max(LCS(a1, b1), LCS(a2, b2));
}
}
int main() {
string a = "program";
string b = "algorithm";
cout << LCS(a,b)<<endl;
}