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];
    }
}
相关推荐
QN1幻化引擎1 小时前
Dalin L — 我造了一门支持中文编程的语言,完整移植到 Rust 了
人工智能·算法·机器学习
Rainy Blue8831 小时前
C转C++速成
c语言·c++·算法
txzrxz2 小时前
二分图详解
数据结构·c++·算法·图论·深度优先搜索·二分图染色
gaosushexiangji2 小时前
数字图像相关DIC系统在结构振动模态测量中的应用
算法
KaMeidebaby2 小时前
卡梅德生物技术快报|如何制备单克隆抗体:小众禽类靶点单抗制备实操流程:双载体抗原交叉筛选完整工艺记录
人工智能·python·深度学习·算法·机器学习
北域码匠3 小时前
Karatsuba乘法超详细解析(原理+流程+性能分析+纯原生C#无第三方库完整实现)
算法·c#·大数乘法·高精度计算·数据结构与算法·分治算法·karatsuba 乘法
不简说3 小时前
JS 代码技巧 vol.4 — 10 个异步并发控制,Promise.all 这帮兄弟的踩坑实录
前端·javascript·面试
fpcc3 小时前
数据结构和算法—数学的应用
数据结构·c++·算法
皓月斯语4 小时前
B4451 [GESP202512 四级] 建造 题解
数据结构·c++·算法·题解
z小猫不吃鱼4 小时前
模型剪枝经典论文精读:DepGraph: Towards Any Structural Pruning
算法·机器学习·剪枝