【力扣】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];
    }
}
相关推荐
qq_43085588几秒前
线代第三章向量第三节:向量间的线性关系二
人工智能·算法·机器学习
AC赳赳老秦1 分钟前
CSV大文件处理全流程:数据清洗、去重与格式标准化深度实践
大数据·开发语言·人工智能·python·算法·机器学习·deepseek
AndrewHZ5 分钟前
【图像处理基石】光线追踪(Ray Tracing)算法入门
图像处理·人工智能·算法·计算机视觉·计算机图形学·光线追踪·渲染技术
橘颂TA10 分钟前
【剑斩OFFER】算法的暴力美学——两数相加
c++·算法·结构与算法
youngee1111 分钟前
hot100-54在排序数组中查找元素的第一个和最后一个位置
数据结构·算法·leetcode
草莓熊Lotso12 分钟前
《算法闯关指南:递归,搜索与回溯算法--递归》--02. 合并两个有序链表,03. 反转链表
运维·数据结构·算法·链表
XFF不秃头12 分钟前
力扣刷题笔记-和为 K 的子数组
c++·笔记·算法·leetcode
MicroTech202514 分钟前
区块链赋能,联邦协同:微算法科技(NASDAQ: MLGO)打造物联网安全分布式检测新架构
科技·算法·区块链
1001101_QIA15 分钟前
vector学习笔记
数据结构·算法
(❁´◡`❁)Jimmy(❁´◡`❁)19 分钟前
【数据结构】 Treap1: 插入,删除,查找,旋转
数据结构·算法