๐ŸŒ•๐ŸŒ•๐ŸŒ• 132. ๅˆ†ๅ‰ฒๅ›žๆ–‡ไธฒ II

ๅžไฝ›็ซฅๅญ2022ๅนด10ๆœˆ10ๆ—ฅ
  • algorithm
  • dp
  • String
ๅฐไบŽ 1 ๅˆ†้’Ÿ

๐ŸŒ•๐ŸŒ•๐ŸŒ• 132. ๅˆ†ๅ‰ฒๅ›žๆ–‡ไธฒ II

้šพๅบฆ: ๐ŸŒ•๐ŸŒ•๐ŸŒ•

้—ฎ้ข˜ๆ่ฟฐ

img_18.png


่งฃๆณ•

class Solution {
    public int minCut(String s) {
        // ๆ€่ทฏ๏ผš
        // ๅ…ˆ dp[i][j]
        int len = s.length();
        if(len == 1) {
            return 0;
        }
        boolean[][] dp = new boolean[len][len];
        for(int i = len - 1; i >= 0; i --) {
            for(int j = i; j < len; j ++) {
                if(i == j) {
                    dp[i][j] = true;
                } else if(i == j - 1) {
                    if(s.charAt(i) == s.charAt(j)) {
                        dp[i][j] = true;
                    }
                } else {
                    if(s.charAt(i) == s.charAt(j) && dp[i + 1][j - 1]) {
                        dp[i][j] = true;
                    }
                }
            }
        }

        if(dp[0][len - 1]) {
            return 0; // ๆ•ดไธชๅฐฑๆ˜ฏๅญ—็ฌฆไธฒ๏ผŒ็›ดๆŽฅ่ฟ”ๅ›ž
        }

        int[] array = new int[len]; // ไปฅ [i] ไธบ็ป“ๅฐพ็š„ๅ›žๆ–‡ไธฒๆœ€ๅฐๅˆ†ๅ‰ฒๆฌกๆ•ฐ [0, i]
        for(int i = 0; i < len; i ++) {
            if(dp[0][i]) {
                array[i] = 0;
            } else {
                // [0, i] ้žๅ›žๆ–‡ไธฒ๏ผŒ้€‰ๅ–ไธญ้—ดๅˆ†ๅ‰ฒ็‚น
                int min = i;
                for(int j = 1; j <= i; j ++) {
                    // j ๅ‰้ขๅˆ†ๅ‰ฒ๏ผŒ[0, j - 1] & [j, i]
                    if(dp[j][i]) {
                        min = Math.min(min, array[j - 1] + 1);
                    }
                }
                array[i] = min;
            }
        }
        return array[len - 1];
    }
}

่พ“ๅ‡บ

img_17.png

ไธŠๆฌก็ผ–่พ‘ไบŽ: 2022/10/10 ไธ‹ๅˆ8:43:48
่ดก็Œฎ่€…: liuxianzhishou