题目简要:
描述现在给出两个序列X和Y,你的任务是找到X和Y的最大公共子序列,也就是说要找到一个最长的序列Z,使得Z既是X的子序列也是Y的子序列。
abcfbc abfcab programming contest abcd mnp
4 2 0
解题思路:
这道题其实我感觉还是有些难的,不过,实际上就是用一个二维数组存放,最后输出最大值即可。
附代码:
#include<bits/stdc++.h>
using namespace std;
int dp[202][202];
int main()
{
string s1,s2;
while(cin>>s1>>s2)
{
for(int i=1;i<=s1.length();i++)
{
for(int j=1;j<=s2.length();j++)
{
if(s1[i-1]==s2[j-1])
dp[i][j]=dp[i-1][j-1]+1;
else
dp[i][j]=max(dp[i-1][j],dp[i][j-1]);
}
}
cout<<dp[s1.length()][s2.length()]<<endl;
}
return 0;
}
解题感受:
其实仅仅是个人看法,我做这道题时,用到的二维数组的使用方式与求最大子阵的方式是相似的,嗯