1.变成回文串的最少插入次数
题目:1312. Minimum Insertion Steps to Make a String Palindrome
状态转移: f(i,j) = min{f(i+1,j), f(i,j-1)}
class Solution {
int n;
int[][] dp;
String s;
public int minInsertions(String s) {
this.s = s;
n = s.length();
dp = new int[n][n];
for(int i=0;i<n;++i){
for(int j=0;j<n;++j){
dp[i][j]=-1;
}
}
return f(0,n-1);
// 如果不同 f(xXy) -> y + f(xX) +y
// x + f(Xy) + x
//
// f(i,j) -> f(i+1,j) + 1, f(i,j-1)+1
}
public int f(int i,int j){
if(i>=j){
return 0;
}
if(dp[i][j]!=-1){
return dp[i][j];
}
if(s.charAt(i)==s.charAt(j)){
return dp[i][j] = f(i+1,j-1);
}
return dp[i][j] = Math.min(f(i+1,j),f(i,j-1)) + 1;
}
}
使用自底向上优化:
TODO
来源:CSDN
作者:好吃吗
链接:https://blog.csdn.net/xhdxhdxhd/article/details/104441366