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

2020-11-27  本文已影响0人  放开那个BUG

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];
    }
上一篇下一篇

猜你喜欢

热点阅读