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];
    }
}
相关推荐
参.商.1 小时前
【Day37】94.二叉树的中序遍历 递归+迭代遍历
leetcode·golang
爱学习的小囧1 小时前
VCF 9.0 操作对象与指标报告自动化教程
运维·服务器·算法·自动化·vmware·虚拟化
嫂子开门我是_我哥2 小时前
心电域泛化研究从0入门系列 | 第四篇:域泛化核心理论与主流方法——破解心电AI跨域失效难题
人工智能·算法·机器学习
Olivia_su2 小时前
数据分析及可视化Tableau自学入门
算法·数据分析·tableau
Sakinol#2 小时前
Leetcode Hot 100 —— 矩阵
leetcode·矩阵
iPadiPhone2 小时前
Spring Boot 自动装配原理与 Starter 开发实战
java·spring boot·后端·spring·面试
程序员爱钓鱼2 小时前
Go字符串与数值转换核心库:strconv深度解析
后端·面试·go
南篱2 小时前
从回调地狱到优雅异步:JavaScript 异步编程的完整演进之路
前端·javascript·面试
天疆说2 小时前
【拓扑学+航天轨道动力学】同伦(Homotopy)概念解析
人工智能·算法·拓扑学