动态规划-最长公共子序列

来源:互联网 发布:linux apache ab 安装 编辑:程序博客网 时间:2024/05/17 05:52

动态规划-最长公共子序列

一、问题描述

给出两个字符串,找到最长公共子序列(LCS),返回LCS的长度。

样例:
给出”ABCD” 和 “EDCA”,这个LCS是 “A” (或 D或C),返回1
给出 “ABCD” 和 “EACB”,这个LCS是”AC”返回 2

二、代码

#include <iostream>#include <cstring>using namespace std;string s1, s2;int maxLen[1000][1000];int main(){    while(cin>>s1>>s2){        int len1=s1.length(), len2= s2.length();        int i, j;         for (i=0; i<=len1; i++)            maxLen[i][0] = 0;        for (i=0; i<=len1; i++)            maxLen[0][i] = 0;        for (i=1; i<=len1; i++){            for (j=1; j<=len2; j++){                //递归转递推                if (s1[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[len1][len2]<<endl;    }    return 0;} 
0 0
原创粉丝点击