最长公共子序列

题目链接

1143. 最长公共子序列 - 力扣(LeetCode)

思路:

  1. 首先了解到题目所说的子序列指的是,只要顺序能对的上,就算子序列

  2. 我们考虑到本题,适合使用 dp 动态规划思想去做,对于 text1 text2 俩个字符串,我们模拟取最大值, dp[i][j] 数组 代表了 text[i-1] 和 text[j-1] 当前元素字符串所能得到的 最大子序列的结果值,那么我们需要特殊考虑 当 dp[0][j] dp[i][0] 的元素,这些都需要赋初值为0,

  3. dp[i][j] 会出现俩种情况,text1[i-1] 等于 text2[j-1] 或者不相等,首先我们看相等的情况,相等的话 dp[i][j] 应该是等于 dp[i-1][j-1]+1 等于在不包含本次相等情况的字符时,所得到的最大值 +1

text1[i-1] 和 text2[j-1] 不相等的情况那就是,需要比较,在 不取text1当前位置 i-1 的情况,以及 不取 text2 当前位置 j-1 的情况,俩个之中的最大值。就能得到当前位置的结果,简单说就是,不包含 当前位置 i 的字符元素 或者 当前位置 j 的字符元素

代码:

javascript 复制代码
/**
 * @param {string} text1
 * @param {string} text2
 * @return {number}
 */
var longestCommonSubsequence = function (text1, text2) {
    let dp = new Array(text1.length + 10).fill(0).map(item => new Array(text2.length + 10).fill(0))

    for (let i = 0; i <= text1.length; i++) {
        for (let j = 0; j <= text2.length; j++) {
            if (i == 0 || j == 0) {
                dp[i][j] = 0
                continue
            }
            if (text1[i - 1] === text2[j - 1]) {
                dp[i][j] = dp[i - 1][j - 1] + 1
            }
            else dp[i][j] = Math.max(dp[i - 1][j], dp[i][j - 1])
        }
    }

    return dp[text1.length][text2.length]
};
相关推荐
funnycoffee1232 分钟前
F5 Big IP如何设置web和SSH登录的白名单
前端·tcp/ip·ssh
JarvanMo10 分钟前
国产 App,求你放过我的 iPhone 电量吧!
前端
先飞的笨鸟13 分钟前
2026 年 Expo + React Native 项目接入微信分享完整指南
前端·ios·app
angelQ15 分钟前
Vercel部署:前后端分离项目的整体部署流程及问题排查
前端·javascript
AI前端老薛15 分钟前
CSS实现动画的几种方式
前端·css
晨米酱17 分钟前
轻量级 Git Hooks 管理工具 Husky
前端·代码规范
Jing_Rainbow19 分钟前
【 前端三剑客-35 /Lesson58(2025-12-08)】JavaScript 原型继承与对象创建机制详解🧬
前端·javascript·面试
携欢19 分钟前
portswigger靶场之修改序列化数据类型通关秘籍
android·前端·网络·安全
如果你好20 分钟前
# Vue 事件系统核心:createInvoker 函数深度解析
前端·javascript·vue.js
GuMoYu20 分钟前
npm link 测试本地依赖完整指南
前端·npm