以最小插入次数构造回文串
题目描述
比如输入“s = abcea” ,算法返回2,因为可以给s插入2个字符变成回文串“abeceba” 或者“aebcbea” 。如果输入s = “aba”,则算法返回0,因为s已经是回文串,不用插入任何字符。
解题思路
base case:当i == j
时,dp[i][j] = 0
;因为当i == j 时 s[i...j]
就是一个字符,本身就是回文串,所以不需要进行任何插入操作。
当s[i] != s[j]
时,插入两次肯定可以让s[i...j]
变成回文串,但是不一定是插入次数最少的。
则:
- 做选择,先将
s[i...j-1]
或者s[i+1...j]
变成回文串 - 根据1的选择,将
s[i...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]) +