当前位置: 首页 > news >正文

经典算法 最长公共子序列问题

问题描述

给定两个字符串 text1text2,返回这两个字符串的最长公共子序列。如果有多个长度相等的最长公共子序列,返回其中一个就行。

一个字符串的 子序列 是指这样一个新的字符串:它是由原字符串在不改变字符相对顺序的情况下删除某些字符(也可以不删除任何字符)后组成的新字符串。

例如:

  • "ace""abcde" 的子序列;
  • "aec" 不是 "abcde" 的子序列。

两个字符串的 公共子序列 是这两个字符串共同拥有的子序列


示例

示例 1

输入:text1 = "abcde", text2 = "ace"
输出:ace

示例 2

输入:text1 = "abc", text2 = "abc"
输出:abc

提示

  • 1 <= text1.length, text2.length <= 1000
  • text1text2 仅由小写英文字符组成

c++代码

#include<bits/stdc++.h>

using namespace std;

string longestCommonSubsequence(string text1, string text2) {
    int m = text1.size(), n = text2.size();
    vector<vector<string>> dp(m, vector<string>(n));
    //dp[i][j] = (text1[i] == text2[j] ? dp[i - 1][j - 1] + 1: max(dp[i - 1][j], dp[i][j - 1]);
    for (int i = 0; i < m; i++) {
        for (int j = 0; j < n; j++) {
            if (text1[i] == text2[j]) {
                if (i >= 1 && j >= 1) dp[i][j] = dp[i - 1][j - 1];
                dp[i][j] += text1[i];
            }
            else {
                string a = "", b = "";
                if (i >= 1) a = dp[i - 1][j];
                if (j >= 1) b = dp[i][j - 1];
                if (a.size() > b.size()) dp[i][j] = a;
                else dp[i][j] = b;
            }
        }
    }
    return dp[m - 1][n - 1];
}

int main() {
    string text1, text2;
    cin >> text1 >> text2;
    cout << longestCommonSubsequence(text1, text2);
    return 0;
}//by wqs
http://www.dtcms.com/a/107529.html

相关文章:

  • GPU与CUDA对应
  • 阿里云服务器对接高防的时候可能会出现的问题
  • 鸿蒙应用元服务开发-Account Kit 常见问题说明
  • BRC认证是什么?如何获得BRC认证?对企业发展的好处
  • 解决Oracle PL/SQL中“表或视图不存在“错误的完整指南
  • 数据分析与知识发现 论文阅读【信息抽取】
  • OSD显示
  • 动态规划——区间DP
  • RedisTemplate 的 6 个可配置序列化器属性对比
  • apk签名与对齐
  • android databinding使用教程
  • modelscope环境准备--装conda、内网穿透、配置HuggingFace
  • 在线sql 转 rust 模型(Diesel、SeaORM),支持多数据 mysql, pg等
  • Java 大视界 -- Java 大数据在智能教育自适应学习平台中的用户行为分析与个性化推荐(169)
  • 合并空值运算符??
  • 爬虫【Scrapy框架的概念与执行流程】
  • c++中%符号使用的注意事项/易错点
  • limma差异分析
  • Scala面向对象
  • 多层内网渗透测试虚拟仿真实验环境(Tomcat、ladon64、frp、Weblogic、权限维持、SSH Server Wrapper后门)
  • 鸿蒙开发_TS快速入门_TS中模块化操作_模块的导入导出---纯血鸿蒙HarmonyOS5.0工作笔记008
  • MySQL主从复制(三)
  • 【Axure元件分享】时间范围选择器
  • 阿里云国际站代理商:模型训练中断数据丢失怎么办?
  • DAY 34 leetcode 349--哈希表.两个数组的交集
  • 【Linux网络与网络编程】04.TCP Socket编程
  • BUUCTF-web刷题篇(7)
  • 软件工程面试题(二十四)
  • 【C++重点】deque
  • linux内核漏洞检测利用exp提权