-
题目描述:
-
Find a longest common subsequence of two strings.
-
输入:
-
First and second line of each input case contain two strings of lowercase character a…z. There are no spaces before, inside or after the strings. Lengths of strings do not exceed 100.
-
输出:
-
For each case, output k – the length of a longest common subsequence in one line.
-
样例输入:
-
abcd cxbydz
-
样例输出:
-
2
动态规划求LCS
#include<iostream>
#include<string>
#include<algorithm>
using namespace std;
int dp[101][101]; //dp[i][j]保存s1前i个字符与s2前j个字符的 LCS
int main()
{
string s1, s2;
while (cin >> s1 >> s2) {
int len1 = s1.size();
int len2 = s2.size();
for (int i=0; i<=len1; ++i)
dp[i][0] = 0;
for (int j=0; j<=len2; ++j)
dp[0][j] = 0;
for (int i=1; i<=len1; ++i)
for (int j=1; j<=len2; ++j)
if (s1[i-1] != s2[j-1]) //s1第i个字符与s2第j个字符不等
dp[i][j] = max (dp[i][j-1], dp[i-1][j]);
else
dp[i][j] = dp[i-1][j-1] + 1; //相等长度加1
cout << dp[len1][len2] << endl;
}//while
return 0;
}