一、题目
Given a string s. In one step you can insert any character at any index of the string.
Return the minimum number of steps to make s palindrome.
A Palindrome String is one that reads the same backward as well as forward.
Example 1:
Input: s = “zzazz”
Output: 0
Explanation: The string “zzazz” is already palindrome we do not need any insertions.
Example 2:
Input: s = “mbadm”
Output: 2
Explanation: String can be “mbdadbm” or “mdbabdm”.
Example 3:
Input: s = “leetcode”
Output: 5
Explanation: Inserting 5 characters the string becomes “leetcodocteel”.
Constraints:
1 <= s.length <= 500
s consists of lowercase English letters.
二、题解
class Solution {
public:
int minInsertions(string s) {
int n = s.size();
vector<vector<int>> dp(n,vector<int>(n,0));
for(int l = 0;l < n - 1;l++){
dp[l][l+1] = s[l] == s[l+1] ? 0 : 1;
}
for(int l = n - 3;l >= 0;l--){
for(int r = l + 2;r < n;r++){
if(s[l] == s[r]) dp[l][r] = dp[l+1][r-1];
else dp[l][r] = min(dp[l+1][r],dp[l][r-1]) + 1;
}
}
return dp[0][n-1];
}
};