[Day11]-[动态规划] 让字符串成为回文串的最少插入次数
![[Day11]-[动态规划]让字符串成为回文串的最少插入次数](https://static001.geekbang.org/infoq/41/41c3fa10a75d870e196d8d21291428fa.png)
1312. 让字符串成为回文串的最少插入次数
难度困难 133 收藏分享切换为英文接收动态反馈
给你一个字符串 s ,每一次操作你都可以在字符串的任意位置插入任意字符。
请你返回让 s 成为回文串的 最少操作次数 。
「回文串」是正读和反读都相同的字符串。
示例 1:
复制代码
示例 2:
复制代码
示例 3:
复制代码
题解:
复制代码
本文字数:604 字
阅读完需:约 2 分钟
![[Day11]-[动态规划]让字符串成为回文串的最少插入次数](https://static001.geekbang.org/infoq/41/41c3fa10a75d870e196d8d21291428fa.png)
难度困难 133 收藏分享切换为英文接收动态反馈
给你一个字符串 s ,每一次操作你都可以在字符串的任意位置插入任意字符。
请你返回让 s 成为回文串的 最少操作次数 。
「回文串」是正读和反读都相同的字符串。
示例 1:
输入:s = "zzazz"输出:0解释:字符串 "zzazz" 已经是回文串了,所以不需要做任何插入操作。
示例 2:
输入:s = "mbadm"输出:2解释:字符串可变为 "mbdadbm" 或者 "mdbabdm" 。
示例 3:
输入:s = "leetcode"输出:5解释:插入 5 个字符后字符串变为 "leetcodocteel" 。
题解:
func minInsertions(s string) int { var solution func(str string) int // 解决方案 var min func(x, y int) int min = func(x, y int) int { if x < y { return x } return y } solution = func(str string) int { n := len(str) var dp = make([][]int, n) // 构建tpTable for i := 0; i < n; i++ { dp[i] = make([]int, n) // 初始化都是0 }
for i := n - 2; i >= 0; i-- { // 从下往上,从左往右遍历 for j := i + 1; j < n; j++ { if str[i] == str[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][n-1] }
return solution(s)}Dead or Alive. 生存战斗是知识的源泉! 2018.11.08 加入
我是一名SRE哨兵,目前是好大夫基础架构部高级工程师。专注于 SRE,微服务、中间件的稳定性和可用性建设,整体负责好大夫服务治理云平台的设计和搭建!

促进软件开发及相关领域知识与创新的传播
ArchSummit全球架构师峰会 3月24-25日
PCon全球产品创新大会 3月25-26日
DIVE全球基础软件创新大会 3月25-26日
ArchSummit全球架构师峰会 4月24-25日
QCon全球软件开发大会 5月12-14日
GMTC全球大前端技术大会 6月10-11日
ArchSummit全球架构师峰会 7月15-16日
PCon全球产品创新大会 8月19-20日
京公网安备 11010502039052号

评论