给出两个字符串,求出这样的一个最长的公共子序列的长度:子序列中的每个字符都能在两个原串中找到,而且每个字符的先后顺序和原串中的先后顺序一致。
如:
ABCBDAB
BDCABA
它们的最长公共子序列就是 BCBA,长度为4。
给出两个字符串,求出这样的一个最长的公共子序列的长度:子序列中的每个字符都能在两个原串中找到,而且每个字符的先后顺序和原串中的先后顺序一致。
如:
ABCBDAB
BDCABA
它们的最长公共子序列就是 BCBA,长度为4。
每组两个长度小于100的字符串。
输出最长公共子序列的长度。
ABCBDAB BDCABA
4
#include <cstdio> #include <iostream> #include <algorithm> #include <cstring> using namespace std; int main() { string str1,str2; int dp[200][200]; while(cin>>str1>>str2) { memset(dp,0,sizeof(dp)); int la = str1.length(); int lb = str2.length(); for(int i = 1; i <= la; i++) for(int j = 1; j <= lb; j++) { if(str1[i - 1] == str2[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[la][lb]<<endl; } return 0;
原文:http://blog.csdn.net/u013445530/article/details/44627505