zoukankan      html  css  js  c++  java
  • 最长公共子序列 Lcs

    这个解释挺容易理解的:

    过程详解

     最长公共子序列Lcs

    给出两个字符串A B,求A与B的最长公共子序列(子序列不要求是连续的)。
    比如两个串为:

    abcicba
    abdkscab

    ab是两个串的子序列,abc也是,abca也是,其中abca是这两个字符串最长的子序列。
    Input
    第1行:字符串A
    第2行:字符串B
    (A,B的长度 <= 1000)
    Output
    输出最长的子序列,如果有多个,随意输出1个。
    Input示例
    abcicba
    abdkscab
    Output示例
    abca

    代码如下:

    需要注意的是,它是随机输出的一组最长公共子序列,以测试样例为例,如果

    void LcsLength(int m,int n)
    函数里的
    else if(num[i - 1][j] > num[i][j - 1])
    改为
    else if(num[i - 1][j] >= num[i][j - 1])

    那输出的就是abcb了,卡在这里好久。。。。。

    心塞。

    #include<iostream>
    #include<cstring>
    using namespace std;
    char a[1002],b[1002];
    int num[1002][1002];
    int flag[1002][1002];
    void LcsLength(int m,int n)
    {
        int i,j;
        for(i = 1;i <= m;i++)
        for(j = 1;j <= n;j++)
        {
            if(a[i] == b[j])
            {
                num[i][j] = num[i - 1][j - 1] + 1;
                flag[i][j] = 1;
            }
            else if(num[i - 1][j] > num[i][j - 1])
            {
                num[i][j] = num[i - 1][j];
                flag[i][j] = 2;
            }
            else
            {
                num[i][j] = num[i][j -1];
                flag[i][j] = 3;
            }
        }
    }
    
    void Lcs(int i,int j)
    {
        if(i == 0 || j == 0)
        return ;
        if(flag[i][j] == 1)
        {
            Lcs(i - 1,j - 1);
            cout << a[i];
        }
        else if(flag[i][j] == 2)
        Lcs(i - 1,j);
        else
        Lcs(i,j - 1);
    }
    
    int main()
    {
        cin >> a + 1 >> b + 1;
        int m = strlen(a + 1);
        int n = strlen(b + 1);
        LcsLength(m,n);
        Lcs(m,n);
        return 0;
    }
    /*
    Sample Input
    abcicba
    abdkscab
    Sample Output
    abca
    */
    
    

  • 相关阅读:
    Python13_安装、解释器
    Python12_关于文件概念的讨论与序列化
    Python11_文件的读写
    which | whereis |locate |find
    tail命令 | head命令
    cat 命令|more命令|less命令
    数据库模型设计,第一范式、第二范式、第三范式简单例子理解
    json
    正则表达式
    SFTP相关命令
  • 原文地址:https://www.cnblogs.com/lu1nacy/p/10016665.html
Copyright © 2011-2022 走看看