二刷hot100-1143.最长公共子序列

状态转移方程:

if(ch1i - 1 == ch2j - 1){

dpij = dpi - 1j - 1 + 1;

}else{

dpij = Math.max(dpij-1,dpi-1j);

}

dp数组的含义:表示长度为i-1和j-1的两个字符串的最长公共子序列;

java 复制代码
class Solution {
    public int longestCommonSubsequence(String text1, String text2) {
        char[] ch1 = text1.toCharArray();
        char[] ch2 = text2.toCharArray();
        int[][] dp = new int[ch1.length + 1][ch2.length + 1];
        for(int i = 0;i < dp.length;i++){
            for(int j = 0;j < dp[0].length;j++){
                if(i == 0 || j == 0){
                    dp[i][j] = 0;
                }
            }
        }
        for(int i = 1;i < dp.length;i++){
            for(int j = 1;j < dp[0].length;j++){
                if(ch1[i - 1] == ch2[j - 1]){
                    dp[i][j] = dp[i - 1][j - 1] + 1;
                }else{
                    dp[i][j] = Math.max(dp[i][j-1],dp[i-1][j]);
                }
            }
        }
        return dp[ch1.length][ch2.length];
    }
}
相关推荐
Nil2084 小时前
leetcode 118杨辉三角
算法·leetcode·职场和发展
wanderist.6 小时前
线性筛法详解:从筛质数到欧拉函数、Möbius 函数与约数函数
java·数据结构·算法
All for pursuit.6 小时前
【设计-1】208.实现Trie (前缀树)
数据结构·c++·算法·leetcode
weixin_307779136 小时前
C++代码实现MATLAB中的crossval函数功能
开发语言·c++·算法·matlab
青少儿编程课堂7 小时前
背包问题(0/1 背包与完全背包)解题精讲——动态规划入门
c++·python·算法·bfs·信息学竞赛
光影少年7 小时前
为什么 JavaScript 中 0.1 + 0.2 !== 0.3,如何让其相等?
前端·javascript·算法
HEJOO97 小时前
Linux 设备驱动系列——使用全局工作队列
java·linux·算法
Code_Solitude8 小时前
c语言:递归
java·c语言·算法
edtoplort9 小时前
OpenAI紧急叫停GPT-6.1 Astra训练,奥尔特曼为何踩刹车
人工智能·gpt·算法
蒜香可达鸭9 小时前
让视频生成流水线跑不崩:一个事件溯源的多 Agent 可靠执行框架
算法