2021-06-05:一个字符串至少需要添加多少个字符能整体变成回文串?
Posted 福大大架构师每日一题
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了2021-06-05:一个字符串至少需要添加多少个字符能整体变成回文串?相关的知识,希望对你有一定的参考价值。
2021-06-05:一个字符串至少需要添加多少个字符能整体变成回文串?
福大大 答案2021-06-05:
动态规划。
s[i]和s[j]不等时:dp[i][j]=min(左边,下边)+1。
s[i]和s[j]相等时:dp[i][j]=左下边。
代码用golang编写。代码如下:
package main
import "fmt"
func main() {
s := "moonfdd"
ret := minInsertions(s)
fmt.Println(ret)
}
func minInsertions(s string) int {
if len(s) == 0 {
return 0
}
N := len(s)
dp := make([][]int, N)
for i := 0; i < N; i++ {
dp[i] = make([]int, N)
}
//对角线以下无效
//对角线默认全0
//紧贴对角线的线,首尾相等为0,不等为1
for i := 0; i < N-1; i++ {
if s[i] != s[i+1] {
dp[i][i+1] = 1
}
}
//从下行往上行遍历,从左往右
for i := N - 3; i >= 0; i-- {
for j := i + 2; j < N; j++ {
if s[i] == s[j] {
//相等看【左下边】
dp[i][j] = dp[i+1][j-1]
} else {
//不等看【左边】和【下边】
dp[i][j] = getMin(dp[i+1][j], dp[i][j-1]) + 1
}
}
}
//右上角
return dp[0][N-1]
}
func getMin(a int, b int) int {
if a < b {
return a
} else {
return b
}
}
执行结果如下:
微信公众号如下:
以上是关于2021-06-05:一个字符串至少需要添加多少个字符能整体变成回文串?的主要内容,如果未能解决你的问题,请参考以下文章
HDU 3746 - Cyclic Nacklace(KMP)