首页 > 其他分享 >lc1312 让字符串成为回文串的最少插入次数

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

时间:2024-03-21 21:46:32浏览次数:27  
标签:int lc1312 插入 字符串 dp 回文

给定长为n的字符串s,每次操作可以在字符串的任意位置插入任意1个字符,如果要让s成为回文串,至少要操作多少次?
1<=n<=500

区间dp,记dp[i][j]表示让[i,j]区间成为回文串的最少操作次数,考虑s[i]与s[j]的相等关系进行转移。

class Solution {
public:
    int dp[505][505];
    int minInsertions(string s) {
        int n = s.size();
        for (int d = 1; d <= n; d++) {
            for (int i = 0; i+d-1 < n; i++) {
                int j = i+d-1;
                if (d == 1) {
                    dp[i][j] = 0;
                } else if (d == 2) {
                    dp[i][j] = s[i]==s[j] ? 0 : 1;
                } else if (s[i] == s[j]) {
                    dp[i][j] = dp[i+1][j-1];
                } else {
                    dp[i][j] = 1 + min(dp[i+1][j], dp[i][j-1]);
                }
            }
        }
        return dp[0][n-1];
    }
};

标签:int,lc1312,插入,字符串,dp,回文
From: https://www.cnblogs.com/chenfy27/p/18088298

相关文章

  • lc1771 由子序列构造的最长回文串的长度
    给出两个字符串word1和word2,需要从word1和word2分别选出某个非空子序列s1和s2,要求连接s1与s2后得到回文串,求该回文串的最大长度。word1和word2长度在[1,1000]内。区间dp,将word1与word2拼接起来,转换成求单个字符串的的最长回文子序列问题,为了保证s1和s2非空,枚举word1和word2中每......
  • lc516 最长回文子序列
    给定长度为n的字符串s,求最长回文子序列的长度。1<=n<=1000区间dp,记dp[i][j]表示区间[i,j]能构成的最长回文串的长度,根据s[i]跟s[j]是否相等进行转移。classSolution{public:intdp[1005][1005];intlongestPalindromeSubseq(strings){intn=s.size()......
  • 125. 验证回文串c
    booljudge(charc){if(c>='a'&&c<='z'||c>='A'&&c<='Z'||c>='0'&&c<='9')returntrue;returnfalse;}boolisPalindrome(char*s){i......
  • 131. 分割回文串c
    /***Returnanarrayofarraysofsize*returnSize.*Thesizesofthearraysarereturnedas*returnColumnSizesarray.*Note:Bothreturnedarrayand*columnSizesarraymustbemalloced,assumecallercallsfree().*/charc[30][30];booljudge(ch......
  • 51单片机串口接收发送字符串
    在使用51单片机开发时,规定相关协议要单片机要通过串口接收一系列数据(以C8051F410单片机为例)。    串口的SBUF寄存器触发中断一次只能接收一个字节的数据,所以使用数组进行存储的时候不能一次将所有数据进行存储。    假设通信协议协议:数据包第一字节为A5,第......
  • JavaScript 实现通过 id 数组获取可展示的 name 拼接字符串
    JavaScript实现通过id数组获取可展示的name拼接字符串场景有一个包含许多对象的数组,每个对象都包含了一个标识(id)和一个名称(name)。想要从这个数组中选出特定的一些对象,这些对象的标识(id)在另一个数组中已经给出。然后,想把这些选出来的对象的名称(name)连接成一个字符串,用逗号分......
  • C语言 - 字符串截取
    1、字符串截取#include<stdio.h>#include<stdlib.h>#include<string.h>intmain(){charstr[80]="1001#8888#你好";constchars[2]="#";char*token;char*Array[10];/*获取第一个子字符串*/token=......
  • C语言字符串
    字符串由双引号引起来的一串字符称为字符串,例如“abcdef”,字符串的结束标志是\0,在计算字符串长度时\0是结束标志,不算做字符串内容。字符与字符串的程序监控intmain(){    chararr1[]="abcdef";    chararr2[]={'a','b','c','d','e','f'};    ......
  • 反转字符串
    描述写出一个程序,接受一个字符串,然后输出该字符串反转后的字符串。(字符串长度不超过1000)数据范围:\(0\len\le1000\)要求:空间复杂度$o(n)\(,时间复杂度\)o(n)$示例1:输入:"abcd"返回值:"dcba"示例2:输入:""返回值:""代码:classSolution:defsolve(self,str:s......
  • leedcode- 回文链表
    毫无创意的一版:#定义一个类SolutionclassSolution:#定义一个方法isPalindrome,用于检查链表是否为回文defisPalindrome(self,head:Optional[ListNode])->bool:#如果链表为空,则它是一个回文ifnothead:returnTrue......