美文网首页
最长公共子序列LCS(C++实现)

最长公共子序列LCS(C++实现)

作者: caisense | 来源:发表于2018-01-19 15:57 被阅读0次

与之前c语言版本相比主要是使用了STL容器.另外下标的计算方式也有改动:记录表c(矩阵)中第0行和第0列都初始化为0作为辅助.
因此第i行对应的是字符串x的第i-1个元素,与原图对比即明白:

这里写图片描述这里写图片描述
由于string模板的限制,字符串从0下标开始,因此x[0]对应矩阵第1行.
明白这点,y亦同理.
#include <iostream>
#include <string>
#include <vector>
using namespace std;
int lcs(string s1, string s2) {
    int len1 = s1.size();
    int len2 = s2.size();
    vector<vector<int>> c(len1+1, vector<int>(len2+1, 0));
    for (int i = 1 ; i <= len1; i++) {
        for(int j = 1; j <=len2 ; j++) {
            if (s1[i-1] == s2[j-1]) c[i][j] = c[i - 1][j - 1] + 1;
            else if (c[i - 1][j] >= c[i][j - 1]) c[i][j] = c[i - 1][j];
            else c[i][j] = c[i][j - 1];
        }
    }
    /* 输出调试
    for (int i = 0 ; i <= len1; i++) {
        for (int j = 0; j <= len2; j++) {
            cout << c[i][j] << " ";
        }
        cout << endl;
    }
    */
    return c[len1][len2];
}

int main() {
    string s1 = "aefawfawfawfaw";
    string s2 = "aefawfeawfwafwaef";
    cout << lcs(s1, s2); //输出:12
    return 0;
}

相关文章

  • 子序列

    最长公共子序列(LCS)(lintcode 77) 描述:给出两个字符串,找到最长公共子序列(LCS),返回LCS...

  • lintcode 最长公共子序列

    给出两个字符串,找到最长公共子序列(LCS),返回LCS的长度。说明最长公共子序列的定义: 最长公共子序列问题是在...

  • LCS问题

    LCS问题包括最长公共子序列和最长公共子串,其中,最长公共子串要求必须连续。 对于二者的求解方式 最长公共子序列:...

  • LCS详解

    LCS是什么 LCS是Longest Common Subsequence的缩写,即最长公共子序列。一个序列,如果...

  • LCS解析,打印最大长度和路径

    LCS是什么 LCS是Longest Common Subsequence的缩写,即最长公共子序列。它与子串的区别...

  • 最长公共子序列LCS(C++实现)

    与之前c语言版本相比主要是使用了STL容器.另外下标的计算方式也有改动:记录表c(矩阵)中第0行和第0列都初始化为...

  • 深度透析最长公共子序列算法

    最长公共子序列(Longest Common Subsequenen, LCS) 1、概念 动态规划(dynami...

  • 最长递增子序列: 动态规划和LCS(最长公共子序列)

    最长递增子序列: 动态规划和LCS(最长公共子序列)子序列和子串的区别:子序列不连续,字串连续。这个题两种解法 动...

  • 最长公共子序列问题

    最长公共子序列,英文缩写为LCS(Longest Common Subsequence)。其定义是,一个序列 S ...

  • (6)动态规划(上) LCS

    LCS 问题描述: 在两个给定的序列中, 找出最长的公共子序列(Largest Common Sequence),...

网友评论

      本文标题:最长公共子序列LCS(C++实现)

      本文链接:https://www.haomeiwen.com/subject/pkogoxtx.html