12_7最长公共子序列

给定两个字符串A和B,返回两个字符串的最长公共子序列的长度。例如,A="1A2C3D4B56”,B="B1D23CA45B6A”,”123456"或者"12C4B6"都是最长公共子序列。

给定两个字符串A和B,同时给定两个串的长度n和m,请返回最长公共子序列的长度。保证两串长度均小于等于300。

测试样例:
"1A2C3D4B56",10,"B1D23CA45B6A",12
返回:6

自己写的,边界条件写的不够优美

class LCS {
public:
    int findLCS(string A, int n, string B, int m) {
        // write code here
        if(0 == n || 0 == m){
            return 0;
        }
        vector< vector<int> > dp(n, vector<int>(m, 0));
        for(int i=0; i<n; ++i){
            if(A[i] == B[0]){
                for(int k=i; k<n; ++k){
                    dp[k][0] = 1;
                }
                break;
            }
        }
        for(int j=0; j<m; ++j){
            if(A[0] == B[j]){
                for(int k=j; k<m; ++k){
                    dp[0][k] = 1;
                }
                break;
            }
        }
        for(int i=1; i<n; ++i){
            for(int j=1; j<m; ++j){
                if(A[i] == B[j]){
                    dp[i][j] = dp[i-1][j-1] + 1;
                }else{
                    dp[i][j] = max(dp[i-1][j], dp[i][j-1]);
                }
            }
        }
        return dp[n-1][m-1];
    }
};

参考答案,写的优美

class LCS {
public:
    int findLCS(string A, int n, string B, int m) {
        // write code here
        if(0 == n || 0 == m){
            return 0;
        }
        vector< vector<int> > dp(n+1, vector<int>(m+1, 0));
        for(int i=0; i<n; ++i){
            for(int j=0; j<m; ++j){
                if(A[i] == B[j]){
                    dp[i+1][j+1] = dp[i][j] + 1;
                }else{
                    dp[i+1][j+1] = max(dp[i+1][j], dp[i][j+1]);
                }
            }
        }
        return dp[n][m];
    }
};
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 最长公共子序列和最长公共子串区别 最长公共子串(Longest CommonSubstring)和最长公共子序列(...
    博客的博客阅读 984评论 1 3
  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 135,027评论 19 139
  • 第5章 引用类型(返回首页) 本章内容 使用对象 创建并操作数组 理解基本的JavaScript类型 使用基本类型...
    大学一百阅读 3,272评论 0 4
  • 由于对厦大的热爱 来到了厦门 这是在嵩鼓码头等船前往鼓浪屿时拍的天空 ——于七月八日下午2:45左右拍摄
    Maog阅读 103评论 0 0
  • 霞光扑闪着泪水的迷离 低落在一片青青草地 黝黑的土地 羚羊的叹息 雄鹰振奋着双翼 狠狠抓住夜的孤戚 骑士的哨声响起...
    磊磊excuseme阅读 204评论 0 5