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];
    }
}
相关推荐
豆瓣鸡9 分钟前
算法日记 - Day10
算法
戴西软件19 分钟前
戴西CAxWorks.VPG车辆工程仿真软件技术解析(上)——安全仿真体系的自动化构建
运维·网络·数据库·人工智能·算法·安全·自动化
zander25830 分钟前
4. 寻找两个正序数组的中位数:用分割点代替合并
数据结构·算法
Kisorge41 分钟前
【电机控制器】 基于STSPIN32G4的FOC控制
stm32·嵌入式硬件·算法
Elivs1 小时前
RMSNorm函数
人工智能·算法·机器学习
tudousisi2221 小时前
P4447 [AHOI2018初中组] 分组 题解复盘
算法
SNAKEpc121381 小时前
OpenGL(十一)- 变换管线
c语言·c++·算法·矩阵·图形渲染
码匠许师傅2 小时前
【C++ 面试真题】 C++ 中的 static 有什么作用?
c++·面试
饼饼学习空间智能3 小时前
遥操作数据能否提升机器人自主化水平?详解模仿学习、仿真放大与Sim2Real闭环
人工智能·算法
胡萝卜术3 小时前
声明式与命令式的边界:从鉴权路由守卫到 useRef 的引用哲学
前端·javascript·面试