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

简介: 1312. 让字符串成为回文串的最少插入次数

@TOC


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

给你一个字符串 s ,每一次操作你都可以在字符串的任意位置插入任意字符。

请你返回让 s 成为回文串的 最少操作次数 。

「回文串」是正读和反读都相同的字符串。

示例 1:

输入:s = "zzazz"
输出:0
解释:字符串 "zzazz" 已经是回文串了,所以不需要做任何插入操作。

来源:力扣(LeetCode)
链接:https://leetcode.cn/problems/minimum-insertion-steps-to-make-a-string-palindrome
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

题解

动态规划,范围尝试模型
dpi:str从i到j需要插入多少个字符形成回文串
在这里插入图片描述左下半区没用,对角线填0
在这里插入图片描述
倒数第二条对角线L==R-1
相等就埴0个,不等就埴1个

普遍位置:
dpi有3种情况
在这里插入图片描述

1)假设i到j-1都已经是回文串,我们只需在i-1位置加上j的字符
dpi+1
在这里插入图片描述

2)假设i+1到j都已经是回文串,我们只需在i位置加上j的字符
即dpi+1+1
在这里插入图片描述
3)假设i+1到j-1都已经是回文串,并且i与j相等
dpi

代码

class Solution {
    public int minInsertions(String s) {
        char[] str=s.toCharArray();
        int n=str.length;
        if(n==0||n==1){
            return 0;
        }
        int[][] dp=new int[n][n];
        for(int i=0;i<n-1;i++){
            dp[i][i+1]=str[i]==str[i+1]?0:1;
        }
        for(int i=n-3;i>=0;i--){
            for(int j=i+2;j<n;j++){
                dp[i][j]=Math.min(dp[i+1][j],dp[i][j-1])+1;
                if(str[i]==str[j]){
                    dp[i][j]=Math.min(dp[i][j],dp[i+1][j-1]);
                }
            }
        }
        return dp[0][n-1];
    }
}
相关文章
|
9月前
|
算法
LeetCode算法题---无重复字符的最长子串、寻找两个正序数组的中位数(三)
LeetCode算法题---无重复字符的最长子串、寻找两个正序数组的中位数(三)
72 0
|
4月前
判断字符
【10月更文挑战第18天】判断字符。
38 5
|
3月前
|
Python
递归魔法:判断字符串是否为回文
本文介绍了如何使用递归判断一个字符串是否是回文。回文字符串是指正读和反读都相同的字符串。文章详细讲解了递归的基本思想和Python实现,并通过多个示例验证了函数的正确性。递归方法通过将大问题分解成更小的子问题,使得判断回文变得简单高效。
103 5
|
8月前
字符串\判断回文
字符串\判断回文
39 2
|
9月前
|
算法 测试技术 C#
【线段树】2213. 由单个字符重复的最长子字符串
【线段树】2213. 由单个字符重复的最长子字符串
【剑指offer】-数字在排序数组中出现的次数-32/67
【剑指offer】-数字在排序数组中出现的次数-32/67
|
Java
给定一个字符串和一个子串。子串中的字符可能重复,输出子串出现的次数。(Java实现)
给定一个字符串和一个子串。子串中的字符可能重复,输出子串出现的次数。(Java实现)
134 0
给定一个字符串和一个子串。子串中的字符可能重复,输出子串出现的次数。(Java实现)
C/C++编程题之删除字符串中出现次数最少的字符
实现删除字符串中出现次数最少的字符,若多个字符出现次数一样,则都删除。输出删除这些单词后的字符串,字符串中其它字符保持原来的顺序。
|
算法
每日算法刷题Day6-循环相克令,字符串插入,单次字符出现
⭐每日算法题解系列文章旨在精选重点与易错的算法题,总结常见的算法思路与可能出现的错误,与笔者另一系列文章有所区别,并不是以知识点的形式提升算法能力,而是以实战习题的形式理解算法,使用算法。
204 0
每日算法刷题Day6-循环相克令,字符串插入,单次字符出现
031.判断字符串是否回文
031.判断字符串是否回文
102 0