写点什么

[Day11]-[动态规划] 让字符串成为回文串的最少插入次数

作者:方勇(gopher)
  • 2022 年 4 月 10 日
  • 本文字数:604 字

    阅读完需:约 2 分钟

[Day11]-[动态规划]让字符串成为回文串的最少插入次数

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

难度困难 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,微服务、中间件的稳定性和可用性建设,整体负责好大夫服务治理云平台的设计和搭建!

评论

发布
暂无评论
[Day11]-[动态规划]让字符串成为回文串的最少插入次数_LeetCode_方勇(gopher)_InfoQ写作平台