๐ŸŒ• ๐ŸŒ— 97. ไบค้”™ๅญ—็ฌฆไธฒ

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

๐ŸŒ• ๐ŸŒ— 97. ไบค้”™ๅญ—็ฌฆไธฒ

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

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

img_14.png


่งฃๆณ•

class Solution {
    public boolean isInterleave(String s1, String s2, String s3) {
        // ๆ€่ทฏ:
        // dp[i][j]
        int m = s1.length();
        int n = s2.length();
        int total = s3.length();
        if(total != m + n) {
            return false;
        }
        if(m == 0) {
            return s2.equals(s3);
        }
        if(n == 0) {
            return s1.equals(s3);
        }
        // m > 0 && n > 0 && total == m + n
        boolean[][] dp = new boolean[m + 1][n + 1];
        dp[0][0] = true;
        for(int i = 1; i <= m; i ++) {
            int p = i - 1;
            if(s1.charAt(p) == s3.charAt(p)) {
                dp[i][0] = dp[i - 1][0];
            }
        }
        for(int j = 1; j <= n; j ++) {
            int q = j - 1;
            if(s2.charAt(q) == s3.charAt(q)) {
                dp[0][j] = dp[0][j - 1];
            }
        }
        for(int i = 1; i <= m; i ++) {
            for(int j = 1; j <= n; j ++) {
                int p = i - 1;
                int q = j - 1;
                if(s1.charAt(p) == s3.charAt(p + q + 1)) {
                    dp[i][j] |= dp[i - 1][j];
                }
                if(s2.charAt(q) == s3.charAt(p + q + 1)) {
                    dp[i][j] |= dp[i][j - 1];
                }
            }
        }
        return dp[m][n];
    }
}

่พ“ๅ‡บ

img_13.png

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