day111(3.13)——leetcode面试经典150

97. 交错字符串

97. 交错字符串

题目:

题解:

java 复制代码
class Solution {
    int[][] dp;
    public boolean isInterleave(String s1, String s2, String s3) {
       int m = s1.length();
       int n = s2.length();
       //如果二者长度不同,那必然是不能被表示的
       if(n+m!=s3.length()) {
        return false;
       }
        //用dp数组表示是否能被a/b表示
       dp = new int[m+1][n+1];
       for(int[] row:dp) {
        Arrays.fill(row, -1);   //-1表示没有计算过
       }
        char[] a = s1.toCharArray();
        char[] b = s2.toCharArray();
        char[] c = s3.toCharArray();
        return dfs(m-1, n-1, a, b, c);
    }

    boolean dfs(int l, int r, char[] a, char[] b, char[] c) {
        if(l<0 && r<0) {
            return true;
        }
        //这是是剪枝,把重复的砍掉
        if(dp[l+1][r+1]!=-1) {  //之前计算过
            return dp[l+1][r+1]==1;
        }

        boolean res = l >= 0 && a[l]==c[l+r+1] && dfs(l-1,r,a,b,c) ||
                        r >=0 && b[r]==c[l+r+1] && dfs(l,r-1,a,b,c);
        dp[l+1][r+1]=res?1:0;
        return res;
    }
}
java 复制代码
class Solution {
    public boolean isInterleave(String s1, String s2, String s3) {
       int m = s1.length();
       int n = s2.length();
       //如果二者长度不同,那必然是不能被表示的
       if(n+m!=s3.length()) {
        return false;
       }
       char[] a = s1.toCharArray();
       char[] b = s2.toCharArray();
       char[] c = s3.toCharArray();
       boolean[][] dp = new boolean[m+1][n+1];
       dp[0][0]=true;
       for(int i=0;i<n;i++) {
            dp[0][i+1]=b[i]==c[i]&&dp[0][i];
        }
        for(int i=0;i<m;i++) {
            dp[i+1][0]=a[i]==c[i]&&dp[i][0];
            for(int j=0;j<n;j++) {
                dp[i+1][j+1]=a[i]==c[i+j+1]&&dp[i][j+1] ||
                            b[j]==c[i+j+1]&&dp[i+1][j];
            }
        }
        return dp[m][n];
    }
}
相关推荐
Darkwanderor1 天前
什么数据量适合用什么算法
c++·算法
zc.ovo1 天前
河北师范大学2026校赛题解(A,E,I)
c++·算法
py有趣1 天前
力扣热门100题之环形链表
算法·leetcode·链表
py有趣1 天前
力扣热门100题之回文链表
算法·leetcode·链表
programhelp_1 天前
SIG 2026 Quant / Susquehanna OA 全攻略
人工智能·机器学习·面试·职场和发展·数据分析
月落归舟1 天前
帮你从算法的角度来认识二叉树---(二)
算法·二叉树
SilentSlot1 天前
【数据结构】Hash
数据结构·算法·哈希算法
样例过了就是过了1 天前
LeetCode热题100 柱状图中最大的矩形
数据结构·c++·算法·leetcode
wsoz1 天前
Leetcode哈希-day1
算法·leetcode·哈希算法