【OfferX】动态规划

我怕爱的太早我们不能终老 提交于 2020-02-22 13:55:41

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

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!