1752: 最长公共子序列问题
描述
题目描述:
读入两行字符串A和B,输出最长的公共子序列的长度。
如 abcdefg
和 agcdgef的最长公共子序列为acdef,长度为5
输入:
两个字符串A和B,长度最长为100
输出:
最长公共子序列的长度
样例输入
abcdefg
agcdgef
样例输出
5
#include <iostream>
#include<bits/stdc++.h>
using namespace std;
int Maxlen[1000][1000];
int i,j;
int main()
{
char s[1000],s2[1000];
cin>>s>>s2;
int len_1 = strlen(s);
int len_2 = strlen(s2);
//特殊情况初始化,就是已知的部分结果
for(i = 0;i <= len_1;i++)
Maxlen[i][0] = 0;
for(j = 0;j <= len_1;j++)
Maxlen[0][j] = 0;
//由已知推未知
for(i = 1;i <= len_1;i++)
for(j = 1;j <= len_2;j++)
{
//字符串第一个字符的下标是从0开始的,而且为0时数据已知,由已知数据推未知
if(s[i-1] == s2[j-1])
Maxlen[i][j] = Maxlen[i-1][j-1] + 1;
else
Maxlen[i][j] = max(Maxlen[i][j-1],Maxlen[i-1][j]);
}
cout<<Maxlen[len_1][len_2]<<endl;
return 0;
}