【错题集-编程题】最长公共子序列(一)(动态规划 - LCS)

简介: 【错题集-编程题】最长公共子序列(一)(动态规划 - LCS)

牛客对应题目链接:最长公共子序列(一)_牛客题霸_牛客网 (nowcoder.com)

力扣对应题目链接:1143. 最长公共子序列 - 力扣(LeetCode)


一、分析题目

【动态规划 - 两个数组 / 字符串之间的 dp 问题】

1、状态表示

dp[i][j] 表示字符串 s1 中 [0, i]  区间与字符串 s2 中 [0, j] 区间中所有的子序列中,最长公共子序列长度。


2、状态转移方程

根据最后⼀个位置的字符情况,划分问题:

  • s1[i] == s2[j]dp[i][j] = dp[i - 1][j - 1] + 1
  • s1[i] != s2[j]dp[i][j] = max(dp[i - 1][j], do[i][j - 1])

3、初始化

dp[0][j] = dp[i][0] = 0


4、遍历顺序

从左往右


5、返回值

dp[n][m]


二、代码

//牛客AC代码
#include <iostream>
#include <vector>
using namespace std;
 
int main()
{
    int n, m;
    cin >> n >> m;
    string s1, s2;
    cin >> s1 >> s2;
    vector<vector<int>> dp(n+1, vector<int>(m+1));
    for(int i=1; i<=n; i++)
    {
        for(int j=1; j<=m; j++)
        {
            if(s1[i-1]==s2[j-1]) dp[i][j]=dp[i-1][j-1]+1;
            else dp[i][j]=max(dp[i-1][j], dp[i][j-1]);
        }
    }
    cout << dp[n][m] << endl;
    return 0;   
}
 
//力扣AC代码
class Solution {
public:
    int longestCommonSubsequence(string text1, string text2) {
        int n=text1.size(), m=text2.size();
        vector<vector<int>> dp(n+1, vector<int>(m+1));
        for(int i=1; i<=n; i++)
        {
            for(int j=1; j<=m; j++)
            {
                if(text1[i-1]==text2[j-1])
                    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][m];
    }
};


相关文章
AutoJS4.1.0实战教程---红包视频
AutoJS4.1.0实战教程---红包视频
141 0
|
安全 Java 数据库连接
如何在Java中实现资源管理与释放?
如何在Java中实现资源管理与释放?
|
编解码 前端开发 JavaScript
【长文慎入】一文吃透React SSR服务端同构渲染
前段时间一直在研究 react ssr技术,然后写了一个完整的 ssr开发骨架。今天写文,主要是把我的研究成果的精华内容整理落地,另外通过再次梳理希望发现更多优化的地方,也希望可以让更多的人少踩一些坑,让更多的人理解和掌握这个技术。 相信看过本文(前提是能对你的胃口,也能较好的消化吸收)你一定会对 react ssr服务端渲染技术有一个深入的理解,可以打造自己的脚手架,更可以用来改造自己的实际项目,当然这不仅限于 react ,其他框架都一样,毕竟原理都是相似的。
1650 0
|
缓存 JavaScript
computed和methods的区别
computed和methods的区别
154 1
|
C语言
C语言 14 模拟计算器 版本更迭
C语言 14 模拟计算器 版本更迭
85 0
|
存储 Linux 编译器
Linux系统编程(多进程编程深入1)
Linux系统编程(多进程编程深入1)
132 0
|
数据采集 数据可视化 数据挖掘
NBA官方球衣销量榜“詹皇”居首,快看看你的偶像排第几
NBA官方球衣销量榜“詹皇”居首,快看看你的偶像排第几
|
敏捷开发 前端开发 开发者
UI框架-element(上)
UI框架-element(上)
|
JSON Linux 语音技术
FreeSWITCH 语音识别 ASR 模块
最近很多人都对FreeSWITCH和ASR对接比较感谢兴趣,(,考虑到大部分人,只是研究一下,并不准确购买商业模块,特意做一个开源项目给大家提供一个参考。
2926 0

热门文章

最新文章