第二章:以最小插入次数构造回文串

1312. 让字符串成为回文串的最少插入次数

  • dp数组的含义:对字符串s[i...j] (注意这里是两端闭合的),最少需要进行dp[i][j]次插入才能变成回文串
  • base case:左下角三角形为0,对角线处为0(因为自己本身就是回文串,不需要插入)
  • 状态转移方程:如果s[i]==s[j],则dp[i][j]=dp[i+1][j-1],不需要插入操作,直接从dp[i+1][j-1]转移过来即可;如果s[i]!=s[j],则取dp[i+1][j]dp[i][j-1]的最小值,插入一次操作即可
  • 最终结果保存在dp[0][n-1]处, 我们用从下到上,从左到右的顺序来填dp表
class Solution {
public:
    int minInsertions(string s) {
        int n=s.size();
        vector<vector<int>>dp(n,vector<int>(n,0));
        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+1][j],dp[i][j-1])+1;
            }
        }
        return dp[0][n-1];

    }
};

   转载规则


《第二章:以最小插入次数构造回文串》 M 采用 知识共享署名 4.0 国际许可协议 进行许可。
 上一篇
第二章:高楼扔鸡蛋_进阶 第二章:高楼扔鸡蛋_进阶
labuladong高楼扔鸡蛋 李永乐老师的讲解花花酱 LeetCode 887 887. 鸡蛋掉落 方法1:dp数组未优化的暴力解法(会超时)分成两个子楼重新按照1层计数 dp数组的含义:dp[i][j]表示i个蛋,要确定j层楼,最小的
2021-07-15
下一篇 
读“把时间当做朋友” 读“把时间当做朋友”
因为不知道某个东西有什么用,所以有些人选择去学习,并在后续中根据学到的东西(如英语、表达能力、运动等)产生了更多的价值,并将这些内化为自己心智的一部分;而有些人选择放弃,不学的人永远都不知道这样东西带来的益处。同样的原因-> 不同的
2021-06-20
  目录