美文网首页
LeetCode 第1312题:让字符串成为回文串的最少插入次数

LeetCode 第1312题:让字符串成为回文串的最少插入次数

作者: 放开那个BUG | 来源:发表于2020-11-27 17:22 被阅读0次

    1、前言

    题目描述

    2、思路

    关于回文串的问题,好像都可以定义一个数组 dp[i][j],表示字符串 s[i ... j] 的最小某某 之类的。

    3、代码

        int minInsertions(String s) {
            int n = s.length();
            // 定义:对 s[i..j],最少需要插入 dp[i][j] 次才能变成回文
            int[][] dp = new int[n][n];
            // base case:i == j 时 dp[i][j] = 0,单个字符本身就是回文
            // dp 数组已经全部初始化为 0,base case 已初始化
    
            // 从下向上遍历
            for (int i = n - 2; i >= 0; i--) {
                // 从左向右遍历
                for (int j = i + 1; j < n; j++) {
                    // 根据 s[i] 和 s[j] 进行状态转移
                    if (s.charAt(i) == s.charAt(j)) {
                        dp[i][j] = dp[i + 1][j - 1];
                    } else {
                        dp[i][j] = Math.min(dp[i + 1][j], dp[i][j - 1]) + 1;
                    }
                }
            }
            // 根据 dp 数组的定义,题目要求的答案
            return dp[0][n - 1];
        }
    

    相关文章

      网友评论

          本文标题:LeetCode 第1312题:让字符串成为回文串的最少插入次数

          本文链接:https://www.haomeiwen.com/subject/ivzwiktx.html