dp数组的定义:
dp[i] [j] 代表的是字符串s [i, ... , j]成为回文串的最少插入次数
base_case:
i == j 时,dp[i] [j] = 0
状态转移方程:
咋想的呢就是相等的话,就不变;
不相等的话就得考虑加上前头或者后头的那个最小的操作次数再加1就好了。
if(s[i] == s[j]){dp[i][j] = dp[i+1][j-1];}
else{dp[i][j] = min(dp[i][j-1], dp[i+1][j]) + 1;}
class Solution {
public:
int minInsertions(string s) {
int n = s.size();
int dp[n][n];
memset(dp,0,sizeof(dp));
for(int i = n-2; i>=0;i-- ){
for(int j =i+1; j<n; j++){
if(s[i] == s[j]){
dp[i][j] = dp[i+1][j-1];
}else{
dp[i][j] = min(dp[i][j-1], dp[i+1][j]) + 1;
}
}
}
return dp[0][n-1];
}
};
原文:https://www.cnblogs.com/lzyrookie/p/14731783.html