问题:求两个给定的字符串的最长公共子序列的长度。
思路:
可以从两个字符串的末尾开始寻找,如果两个对应的字符相等,分别对两个字符串的倒数一位进行同样的操作。如果不相等,一个字符串退一位,另一个字符串不变,求这两种情况的·最大值。递归的边界是是否到达了字符串的开头,如果是的话,再次比较是否相等,相等的话返回1,不相等的话返回0。
代码实现:
#include"pch.h"
#include<iostream>
#include<string>
#include<algorithm>
using namespace std;
string firstStr;
string secondStr;
int LCS(int x, int y)
{
if (x == 0 || y == 0)
{
if (firstStr[x] == secondStr[y])
{
return 1;
}
else
return 0;
}
if (firstStr[x] == secondStr[y])
{
return LCS(x - 1, y - 1)+1;
}
else
return max(LCS(x - 1, y), LCS(x, y - 1));
}
int main()
{
cout << "Enter first string: ";
cin >> firstStr;
cout << "Enter second string: ";
cin >> secondStr;
cout << "The length of the longest common string is " << LCS(firstStr.size()-1, secondStr.size()-1) << endl;
}
实现效果: