首页 > 其他分享 >动态规划-回文串系列——1312.让字符串变成回文串的最小插入次数

动态规划-回文串系列——1312.让字符串变成回文串的最小插入次数

时间:2024-11-02 16:16:27浏览次数:3  
标签:1312 次数 int 插入 字符串 dp 回文

1.题目解析

题目来源:1312.让字符串变成回文串的最小插入次数——力扣

测试用例

2.算法原理

1.状态表示

一维dp表无法存储任意区间内将字符串变为回文子串的最小插入次数,所以使用二维dp表存储将[i,j]区间的字符串变为回文子串的最小插入次数

dp[i][j]:将[i,j]区间的字符串变为回文子串的最小插入次数

2.状态转移方程

这里首先判断两端字符是否相同,如果相同则需要判断[i,j]区间字符个数,然后向中间移动取dp表的值,反之不相同则需要对左插与右插两种情况取min值

3.初始化

dp表只有中间对角线与中间对角线的右上方对角线两条路线可能会用到下三角的值,但是下三角全为0不影响填表,因此不用初始化

4.填表顺序

填写时可能用到左下角或者左边与正下方的值,所以填表需要从下至上且每行从左到右

5.返回值 

根据状态表示可以直接返回dp[0][n-1]

3.实战代码

代码解析

class Solution {
public:
    int minInsertions(string s) {
        int n = s.size();
        vector<vector<int>> dp(n, vector<int>(n));

        for (int i = n - 1; i >= 0; i--) {
            for (int j = i + 1; j < n; j++) {
                if (s[i] == s[j]) {
                    dp[i][j] = dp[i + 1][j - 1];
                } else {
                    dp[i][j] = min(dp[i][j - 1] + 1, dp[i + 1][j] + 1);
                }
            }
        }
        return dp[0][n - 1];
    }
};

 

标签:1312,次数,int,插入,字符串,dp,回文
From: https://blog.csdn.net/2301_80689220/article/details/143451631

相关文章

  • python之字符串总结
     字符串(str)对于字符串的学习,我整理了网上的一些资料,希望可以帮助到各位!!!概述由多个字母,数字,特殊字符组成的有限序列字符串的定义:可以使用一对单引号或者双引号,也可以一对三个单引号或者一对三个双引号定义字符串。注意:没有单符号的数据类型'a'"a"s1='......
  • 8.字符串
    字符串开题顺序:\(HABE\)\(A\)luoguP3501[POI2010]ANT-Antisymmetry多倍经验:SP15569Antisymmetry题解\(B\)luoguP4555[国家集训队]最长双回文串题解\(C\)luoguP6114【模板】Lyndon分解\(D\)BZOJ2176Strangestring\(E\)CF471DMUHandCubeWalls题......
  • 【数据结构-邻项消除】力扣1047. 删除字符串中的所有相邻重复项
    给出由小写字母组成的字符串s,重复项删除操作会选择两个相邻且相同的字母,并删除它们。在s上反复执行重复项删除操作,直到无法继续删除。在完成所有重复项删除操作后返回最终的字符串。答案保证唯一。示例:输入:“abbaca”输出:“ca”解释:例如,在“abbaca”中,我们可以......
  • 模拟实现字符串函数
    今天给大家分享几个字符串函数的模拟实现,它们分别是strlen,strcpy,strcat函数。这几个函数我上一期已经介绍过了,那么今天我就不过多介绍它们了,今天着重来看它们是如何实现的1.strlen函数我们先看代码这个函数的逻辑便是记录\0之前的字符,那么我们便可以通过计数器来实现,用一......
  • 字符串函数
    大家好,今天我们来了解几个字符串函数1.strcpy函数这个函数是一个字符串复制函数,其全称为stringcopy,它可以将一个源字符数组的内容复制到目标字符数组中,我们需要关注几个问题,首先源字符串必须以\0结束,拷贝时会将\0也一起拷贝过去,目标空间内存要足够大,目标空间必须可变,如果大家......
  • 删除字符串中的所有相邻重复项
    删除字符串中的所有相邻重复项题目链接:LeetCode1047描述给出由小写字母组成的字符串s,重复项删除操作会选择两个相邻且相同的字母,并删除它们。在s上反复执行重复项删除操作,直到无法继续删除。在完成所有重复项删除操作后返回最终的字符串。答案保证唯一。示例:输入:"abba......
  • 动态规划-回文串问题——132.分割回文串II
    1.题目解析题目来源:132.分割回文串II——力扣测试用例2.算法原理首先回文串问题一定首先需要保存每个回文子串出现的位置,即二维dp表来存储所有子字符串中符合回文子串的位置,如图1.状态表示创建一个一维dp表来存储第i个位置之前的字符串数组全部划分为回文子......
  • (C语言)两个字符串的第一个字母合并
    #include<stdio.h>#include<string.h>voidNONO();voidfun(char*a,char*b){ char*p=a; //将字符串a的地址赋值给指针p方便访问 inti,k=1; //k=1使从第二个空间输入 while(*p=='') //将字符串前面的空格跳过 { p++; } *b=*p; //输入第一个字母......
  • (算法)交错字符串————<动态规划>
    1.题⽬链接:97.交错字符串2.题⽬描述:3.解法(动态规划):算法思路:对于两个字符串之间的dp问题,我们⼀般的思考⽅式如下:        i.选取第⼀个字符串的[0,i]区间以及第⼆个字符串的[0,j]区间当成研究对象,结合题⽬的要求来定义「状态表⽰」;        ii.......
  • printf打印带中文的字符串不乱码的编译注意事项
    在Windows环境下编译:MSC编译器MSC编译器会把源程序转换为当前代码页编码的源程序。1、如果源文件是ANSI(当前代码页936)编码,直接编译;2、如果源文件是不带BOM的UTF-8,则编译的时候需要加-source-charset:UTF-8;3、如果源文件是带BOM的UTF-8、UTF-16LE、UTF-16BE,直接进行编译。G......