当前位置: 首页 > article >正文

Leetcode面试经典150题-97.交错字符串

给定三个字符串 s1s2s3,请你帮忙验证 s3 是否是由 s1 和 s2 交错 组成的。

两个字符串 s 和 t 交错 的定义与过程如下,其中每个字符串都会被分割成若干 非空 

子字符串

  • s = s1 + s2 + ... + sn
  • t = t1 + t2 + ... + tm
  • |n - m| <= 1
  • 交错 是 s1 + t1 + s2 + t2 + s3 + t3 + ... 或者 t1 + s1 + t2 + s2 + t3 + s3 + ...

注意:a + b 意味着字符串 a 和 b 连接。

示例 1:

输入:s1 = "aabcc", s2 = "dbbca", s3 = "aadbbcbcac"
输出:true

示例 2:

输入:s1 = "aabcc", s2 = "dbbca", s3 = "aadbbbaccc"
输出:false

示例 3:

输入:s1 = "", s2 = "", s3 = ""
输出:true

提示:

  • 0 <= s1.length, s2.length <= 100
  • 0 <= s3.length <= 200
  • s1s2、和 s3 都由小写英文字母组成

进阶:您能否仅使用 O(s2.length) 额外的内存空间来解决它?

其他的就不多说了,上代码,看不懂的请留言或者私信,收到第一时间解答

class Solution {
    public boolean isInterleave(String s1, String s2, String s3) {
        if(s1.length() + s2.length() != s3.length()) {
            return false;
        }
        /**都转成字符数组方便操作 */
        char[] s1Arr = s1.toCharArray();
        char[] s2Arr = s2.toCharArray();
        char[] s3Arr = s3.toCharArray();
        /**定义动态规划数组,dp[i][j]表示s1的前i个字符和s2的前j个字符能不能交错组成s3的前i+j个字符*/
        boolean[][] dp = new boolean[s1Arr.length+1][s2Arr.length+1];
        dp[0][0] = true;
        /**初始化第一行和第一列 */
        for(int i = 1; i < dp.length; i++) {
            dp[i][0] = dp[i-1][0] && s1Arr[i-1] == s3Arr[i-1];
        }
        for(int j = 1; j < dp[0].length; j++) {
            dp[0][j] = dp[0][j-1] && s2Arr[j-1]==s3Arr[j-1];
        }
        /**初始化一般情况 */
        for(int i = 1; i < dp.length; i++) {
            for(int j = 1; j < dp[i].length; j++) {
                dp[i][j] = (dp[i][j - 1] && s2Arr[j-1] == s3Arr[i+j-1]) || (dp[i-1][j] && s1Arr[i-1]==s3Arr[i+j-1]);
            }
        }
        /**返回结果:s1的前s1.length()个字符和s2的前s2.length个字符能不能组成s3*/
        return dp[s1Arr.length][s2Arr.length];
    }
}


http://www.kler.cn/news/312306.html

相关文章:

  • 记一次kafka消息丢失问题排查
  • [SDX35+WCN6856]SDX35 + WCN6856 WiFi可以up起来之后无法扫描到SSID
  • 7.sklearn-逻辑回归、精确率和召回率、ROC曲线和AUC指标
  • Java项目: 基于SpringBoot+mybatis+maven旅游管理系统(含源码+数据库+毕业论文)
  • nvm node管理工具常用指令
  • 编程基础:函数栈帧的创建和销毁
  • (十六)Ubuntu 20.04 下搭建PX4+MATLAB 仿真环境(HITL)
  • 无人机之AI跟踪篇
  • Facebook直播限流是什么原因?是ip地址导致的吗
  • Java商城的技术优势有哪些
  • Spring 出现 No qualifying bean of type ‘com.xxx‘ available 解决方法
  • 35.贪心算法2
  • [ffmpeg] 视频格式转换
  • 开发板与ubuntu建立网络通信(NFS和TFTP协议搭建)
  • elasticsearch实战应用
  • NAT网络地址转换
  • 【spring】spring框架中使用的设计模式有哪些,经典的设计模式应用,spring框架中哪些地方使用了哪些优秀的设计模式
  • 制作炫酷个人网页:用 HTML 和 CSS3 展现你的风格
  • macos清理垃圾桶时提示 “操作无法完成,因为该项目正在使用中” 解决方法 , 强制清理mac废纸篓 方法
  • 外国药品位置检测系统源码分享
  • 好用的XML解析库——fast-xml-parser
  • 应用案例|开源 PolarDB-X 在互联网安全场景的应用实践
  • YOLOv9改进系列,YOLOv9主干网络替换为RepViT (CVPR 2024,清华提出,独家首发),助力涨点
  • 基于Springboot的无接触外卖配送系统
  • 电风扇制造5G智能工厂物联数字孪生平台,推进制造业数字化转型
  • 35. MyBatis中的缓存失效机制是如何工作的?
  • pytorch入门(1)——pytorch加载数据初认识
  • Nginx:高性能Web服务器与反向代理的深度剖析
  • 契约锁与您相约2024新疆数字经济创新大会暨新疆数字丝路博览会
  • QT支持C/C++工业边缘计算网关带RS485、HDMI视频输出