动态规划——1312. 让字符串成为回文串的最少插入次数

动态规划——1312. 让字符串成为回文串的最少插入次数

题目:

思路:

  1. dp数组的定义:dp[i] [j] 代表的是字符串s [i, ... , j]成为回文串的最少插入次数

  2. base_case:i == j 时,dp[i] [j] = 0

  3. 状态转移方程:咋想的呢就是相等的话,就不变;

    不相等的话就得考虑加上前头或者后头的那个最小的操作次数再加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];
    }
};

Rank:

Tips:

posted @ 2021-05-05 15:01  Originhhh  阅读(146)  评论(0)    收藏  举报