• linkedu视频
  • 平面设计
  • 电脑入门
  • 操作系统
  • 办公应用
  • 电脑硬件
  • 动画设计
  • 3D设计
  • 网页设计
  • CAD设计
  • 影音处理
  • 数据库
  • 程序设计
  • 认证考试
  • 信息管理
  • 信息安全
菜单
linkedu.com
  • 网页制作
  • 数据库
  • 程序设计
  • 操作系统
  • CMS教程
  • 游戏攻略
  • 脚本语言
  • 平面设计
  • 软件教程
  • 网络安全
  • 电脑知识
  • 服务器
  • 视频教程
  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号
您的位置:首页 > 程序设计 >C语言 > 最长公共子序列

最长公共子序列

作者:Fyn_Andersen 字体:[增加 减小] 来源:互联网 时间:2017-12-08

Fyn_Andersen通过本文主要向大家介绍了最长公共子序列等相关知识,希望对您有所帮助,也希望大家支持linkedu.com www.linkedu.com

 

Input示例

abcicba
abdkscab

Output示例

abca

 

 

 

 

#include <iostream>
#include <cstring>

using namespace std;

int c[1001][1001], b[1001][1001];

void LSC(int n, int m, string x, string y)
{
    int i, j;
    for(i = 0; i <= n; i++)
        c[i][0] = 0;
    for(j = 0; j <= m; j++)
        c[0][j] = 0;
    for(i = 1; i <= n; i++)
    {
        for(j = 1; j <= m; j++)
        {
            if(x[i-1] == y[j-1])
            {
                c[i][j] = c[i-1][j-1] + 1;
                b[i-1][j-1] = 0;
            }
            else
            {
                if(c[i-1][j] >= c[i][j-1])
                {
                    c[i][j] = c[i-1][j];
                    b[i-1][j-1] = 1;
                }
                else{
                    c[i][j] = c[i][j-1];
                    b[i-1][j-1] = -1;
                }
            }
        }
    }
}

void S_LSC(string x, int i, int j)
{
    if(i == 0 || j == 0)
        return;
    if(b[i-1][j-1] == 0)
    {
        S_LSC(x, i-1, j-1);
        cout << x[i-1];
    }
    if(b[i-1][j-1] == 1)
    {
        S_LSC(x, i-1, j);
    }
    if(b[i-1][j-1] == -1)
    {
        S_LSC(x, i, j-1);
    }
}

int main()
{
    string x, y;
    int n, m;
    cin >> x >> y;
    n = x.length();
    m = y.length();
    LSC(n, m, x, y);
    S_LSC(x, n, m);
    return 0;
}

 

 

 

 

 

分享到:QQ空间新浪微博腾讯微博微信百度贴吧QQ好友复制网址打印

您可能想查找下面的文章:

相关文章

  • 2017-05-28C++中返回指向函数的指针示例
  • 2017-05-28bloom filter概念讲解以及代码分析
  • 2017-05-28C++ 将文件数据一次性加载进内存实例代码
  • 2017-05-28C++并查集亲戚(Relations)算法实例
  • 2017-05-28vc获取计算机名和ip地址的方法
  • 2017-05-28C语言中fchdir()函数和rewinddir()函数的使用详解
  • 2017-05-28C++入门之基础语法学习教程
  • 2017-05-28C++大数模板(推荐)
  • 2017-05-28C语言中逻辑运算符与条件运算符的学习教程
  • 2017-05-28最长公共子字符串的使用分析

文章分类

  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号

最近更新的内容

    • C++画正弦线实例代码
    • C语言编写银行打印程序实例参考
    • C++中const用法小结
    • C语言使用普通循环方法和递归求斐波那契序列示例代码
    • 详解C语言中的ttyname()函数和isatty()函数的用法
    • C++中单链表的建立与基本操作
    • Linux线程管理必备:解析互斥量与条件变量的详解
    • 利用C语言实践OOP,以及new,delete的深入分析
    • 浅析C++的特殊工具与技术
    • C语言获取消耗内存的方法

关于我们 - 联系我们 - 免责声明 - 网站地图

©2020-2025 All Rights Reserved. linkedu.com 版权所有