最长公共子序列

题目链接

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]
};
相关推荐
Roselind_Yi几秒前
技术拆解:《从音频到动效:我是如何用 Web Audio API 拆解音乐的?》
前端·javascript·人工智能·音视频·语音识别·实时音视频·audiolm
和科比合砍81分几秒前
pnpm:public-hoist-pattern[]配置
前端
我叫黑大帅1 分钟前
Js常用数组处理
前端·javascript·面试
敲代码的约德尔人1 分钟前
React useEffect 完全指南:我在 3 个项目中踩坑后总结的血泪经验
前端·react.js
算法鑫探2 分钟前
C语言结构体:学生信息统计实战
c语言·数据结构·算法·新人首发
小凡同志2 分钟前
React 组件设计模式:从 HOC 到 Render Props 再到 Hooks
前端·react.js
毛骗导演3 分钟前
OpenClaw Auth Profile 与多 Key 冷却隔离机制深度解析:一个 API Key 是如何被选择、追踪并轮换的
前端·架构
用户9751470751363 分钟前
如何在 Vite 中配置 CSS 模块,以避免全局样式被模块化隔离覆盖?
前端
我叫黑大帅3 分钟前
Js常用的字符串处理
前端·javascript·面试
栀秋6665 分钟前
深入浅出:手写一个迷你版 Zustand
前端·react.js·前端框架