【力扣】1312. 让字符串成为回文串的最少插入次数

一、题目描述

二、题解

本题我们利用动态规划的思想来解决。

1、状态表示

首先创建一个dp数组,dp[i][j] 表示的是将字符串 s 的 [ i, j ] 区间的这一子串,变成回文串的最少插入次数。

2、状态转移方程

3、初始化
根据「状态转移方程」,没有不能递推表示的值。 无需初始化
4、填表顺序
根据「状态转移方程」,我们发现,在 dp 表所表示的矩阵中, dp[i + 1] 表示下一行的位置,
dp[j - 1] 表示前一列的位置。因此我们的填表顺序应该是 从下往上填写每一行,每一行从左往右

5、返回值

最后返回dp[0][n-1]的值即可。

三、 解题代码

java 复制代码
class Solution {
    public int minInsertions(String s) {
        int n = s.length();
        //创建dp表
        int[][] dp = new int[n][n];
        //无需初始化
        //填写dp表
        for(int i = n-1; i >= 0; i--) {
            for(int j = i; j < n; j++) {
                if(s.charAt(i) == s.charAt(j)) {
                    if(i == j) {
                        dp[i][j] = 0;
                    }else if(i + 1 == j) {
                        dp[i][j] = 0;
                    }else {
                        dp[i][j] = dp[i+1][j-1];
                    }
                }else {
                    dp[i][j] = Math.min(1 + dp[i][j-1], 1 + dp[i+1][j]);
                }
            }
        }
        return dp[0][n-1];
    }
}
相关推荐
代码栈上的思考12 分钟前
二叉树的层序遍历:4道例题讲解
算法·宽度优先·队列在宽度优先搜索中的应用
杰瑞不懂代码15 分钟前
【公式推导】AMP算法比BP算法强在哪(二)
python·算法·机器学习·概率论
野蛮人6号16 分钟前
力扣热题100道之45跳跃游戏2
算法·leetcode·游戏
唐僧洗头爱飘柔952718 分钟前
【区块链技术(05)】区块链核心技术:哈希算法再区块链中的应用;区块哈希与默克尔树;公开密钥算法、编码和解码算法(BASE58、BASE64)
算法·区块链·哈希算法·base64·默克尔树·区块哈希·公私钥算法
不能只会打代码27 分钟前
力扣--3578. 统计极差最大为 K 的分割方式数(Java实现,代码注释及题目分析讲解)
算法·leetcode·动态规划·滑动窗口
小尧嵌入式30 分钟前
QT软件开发知识流程及秒表计时器开发
开发语言·c++·qt·算法
踢球的打工仔43 分钟前
前端html(3)
前端·算法·html
程序员-King.44 分钟前
day114—同向双指针(数组)—统计得分小于K的子数组数目(LeetCode-2302)
算法·leetcode·双指针
智算菩萨1 小时前
深度学习在教育数据挖掘(EDM)中的方法体系:从任务建模到算法范式的理论梳理与总结
深度学习·算法·数据挖掘
_OP_CHEN1 小时前
【算法基础篇】(二十七)从记忆化搜索到动态规划:保姆级入门指南,带你吃透 DP 核心思想!
算法·蓝桥杯·动态规划·记忆化搜索·算法竞赛·acm/icpc