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

2023-12-01 04:18

本文主要是介绍LeetCode —— 1312. 让字符串成为回文串的最少插入次数,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

文章目录

  • 题目描述
  • 示例
    • 示例一
    • 示例二
    • 示例三
    • 示例四
    • 示例五
  • 解题思路
  • 代码呈现
  • 参考文献

题目描述

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

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

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

示例

示例一

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

示例二

输入:s = "mbadm"
输出:2
解释:字符串可变为 "mbdadbm" 或者 "mdbabdm"

示例三

输入:s = "leetcode"
输出:5
解释:插入 5 个字符后字符串变为 "leetcodocteel"

示例四

输入:s = "g"
输出:0

示例五

输入:s = "no"
输出:1

解题思路

这道题的解法是动态规划,我们就拿下面这个字符串举例:
在这里插入图片描述

首先对于每个单个的字符来说,其肯定是回文串。那么假如我们构建的dp[i][j]来表示i~j范围内构成回文串所需要的步骤数。那么这个矩阵的对角线元素则均为0。
在这里插入图片描述

那么根据我们对dp的理解,我们知道i不会超过j的,所以对于左下角矩阵实际上是不用填充的,我们要填充的只有右上角的矩阵。

对于dp[i][j]来说,我们现在能够拿到dp[i+1][j-1]的值(其中dp[i+1][j-1]表示i+1j-1范围内元素是否是回文的),那么dp[i][j]就有以下几种情况:

  • 第一种就是s[i] == s[j],在这种情况下,dp[i][j] = dp[i+1][j-1]
    在这里插入图片描述
  • 第二种就是s[i] != s[j]
    在这里插入图片描述

这种情况下,我们我们可以在i的右边加上c使得s[i+1]~s[j]成为一个回文串。或者在j的左边加上z,使得s[i]~s[j-1]成为一个回文串,之后取这两个步骤最少的那一步。那么假设现在我们在i的右边加上c了,那么此时我们只需要在这个回文串的右边(也就是j的右边)加上z就可以构成回文了。
在这里插入图片描述

代码呈现

class Solution {
public:/*** @brief leetcode提供的函数* * @param s 待构成回文的字符串* @return int 构成回文的最少步骤*/int minInsertions(string s) {int s_size = s.size();vector<vector<int>> dp(s_size,vector<int>(s_size,0));for(int i =s_size-2;i>=0;i--){for(int j = i+1;j<s_size;j++){if(s[i] == s[j]){dp[i][j] = dp[i+1][j-1];}else{dp[i][j] = min(dp[i+1][j],dp[i][j-1])+1;}}}return dp[0][s_size-1];}
};

参考文献

[1] labuladong的算法小抄[M].付东来

这篇关于LeetCode —— 1312. 让字符串成为回文串的最少插入次数的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/439767

相关文章

Java实现将HTML文件与字符串转换为图片

《Java实现将HTML文件与字符串转换为图片》在Java开发中,我们经常会遇到将HTML内容转换为图片的需求,本文小编就来和大家详细讲讲如何使用FreeSpire.DocforJava库来实现这一功... 目录前言核心实现:html 转图片完整代码场景 1:转换本地 HTML 文件为图片场景 2:转换 H

Java使用正则提取字符串中的内容的详细步骤

《Java使用正则提取字符串中的内容的详细步骤》:本文主要介绍Java中使用正则表达式提取字符串内容的方法,通过Pattern和Matcher类实现,涵盖编译正则、查找匹配、分组捕获、数字与邮箱提... 目录1. 基础流程2. 关键方法说明3. 常见场景示例场景1:提取所有数字场景2:提取邮箱地址4. 高级

Python 字符串裁切与提取全面且实用的解决方案

《Python字符串裁切与提取全面且实用的解决方案》本文梳理了Python字符串处理方法,涵盖基础切片、split/partition分割、正则匹配及结构化数据解析(如BeautifulSoup、j... 目录python 字符串裁切与提取的完整指南 基础切片方法1. 使用切片操作符[start:end]2

MyBatis的xml中字符串类型判空与非字符串类型判空处理方式(最新整理)

《MyBatis的xml中字符串类型判空与非字符串类型判空处理方式(最新整理)》本文给大家介绍MyBatis的xml中字符串类型判空与非字符串类型判空处理方式,本文给大家介绍的非常详细,对大家的学习或... 目录完整 Hutool 写法版本对比优化为什么status变成Long?为什么 price 没事?怎

MySQL常用字符串函数示例和场景介绍

《MySQL常用字符串函数示例和场景介绍》MySQL提供了丰富的字符串函数帮助我们高效地对字符串进行处理、转换和分析,本文我将全面且深入地介绍MySQL常用的字符串函数,并结合具体示例和场景,帮你熟练... 目录一、字符串函数概述1.1 字符串函数的作用1.2 字符串函数分类二、字符串长度与统计函数2.1

C# $字符串插值的使用

《C#$字符串插值的使用》本文介绍了C#中的字符串插值功能,详细介绍了使用$符号的实现方式,文中通过示例代码介绍的非常详细,需要的朋友们下面随着小编来一起学习学习吧... 目录$ 字符使用方式创建内插字符串包含不同的数据类型控制内插表达式的格式控制内插表达式的对齐方式内插表达式中使用转义序列内插表达式中使用

详解MySQL中JSON数据类型用法及与传统JSON字符串对比

《详解MySQL中JSON数据类型用法及与传统JSON字符串对比》MySQL从5.7版本开始引入了JSON数据类型,专门用于存储JSON格式的数据,本文将为大家简单介绍一下MySQL中JSON数据类型... 目录前言基本用法jsON数据类型 vs 传统JSON字符串1. 存储方式2. 查询方式对比3. 索引

MySQL字符串常用函数详解

《MySQL字符串常用函数详解》本文给大家介绍MySQL字符串常用函数,本文结合实例代码给大家介绍的非常详细,对大家学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧... 目录mysql字符串常用函数一、获取二、大小写转换三、拼接四、截取五、比较、反转、替换六、去空白、填充MySQL字符串常用函数一、

Python中反转字符串的常见方法小结

《Python中反转字符串的常见方法小结》在Python中,字符串对象没有内置的反转方法,然而,在实际开发中,我们经常会遇到需要反转字符串的场景,比如处理回文字符串、文本加密等,因此,掌握如何在Pyt... 目录python中反转字符串的方法技术背景实现步骤1. 使用切片2. 使用 reversed() 函

MySQL查询JSON数组字段包含特定字符串的方法

《MySQL查询JSON数组字段包含特定字符串的方法》在MySQL数据库中,当某个字段存储的是JSON数组,需要查询数组中包含特定字符串的记录时传统的LIKE语句无法直接使用,下面小编就为大家介绍两种... 目录问题背景解决方案对比1. 精确匹配方案(推荐)2. 模糊匹配方案参数化查询示例使用场景建议性能优