LeetCode:97. 交错字符串

这是一篇关于LeetCode第97题的解题文章,探讨如何使用动态规划验证三个字符串s1, s2, s3是否可以交错组成。解题思路是通过建立状态转移方程,描述s1和s2的字符能否交错形成s3,然后通过填表的方式逐步确定答案。文章以示例和代码详细解释了动态规划的实现过程。" 107805261,9971898,Linux文件编程详解与C标准库操作,"['Linux', 'C语言', '文件操作']
摘要由CSDN通过智能技术生成

1. 题目描述

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

示例 1:

示例 2:

2. 解题思路

  s1 , s2 组成 s3 过程中不能改变 s1, s2 的字符顺序,示例2中 s1, s2 字符和与 s3 相同,但由于不能改变s1, s2 的字符顺序,结果为 false.

90%的字符串问题可由动态规划解决,本题就是一道动态规划问题。

首先找出状态转移方程:

假设 dp[i][j] 代表 s1 的前 j 个字符与 s2 的前 i 个字符能否交错组成 s3 的 前 (i + j) 个字符。

如果为True,又代表着 s1 的第 j 个字符或者 s2 的第 i 个字符与 s3 的第(i + j)个字符相等。

接下来找出状态转移方程:

     dp[i][j] = 1, s1.charAt(j-1) == s3.charAt(i+j-1) && dp[i][j-1] == 1;

     dp[i][j] = 1, s2.charAt(i-1) == s3.charAt(i+j-1) && dp[i-1][j] == 1;

     其余情况都为0;

    即当 s1 的第 j 个字符或者 s2 的第 i 个字符与 s3 的第(i + j)个字符相等,并且 dp[i][j-1] 或者 dp[i-1][j] 等于 1.

   dp[i][j-1] 或者 dp[i-1][j]等于 1 代表着能交错组成s3 的 前 (i + j-1) 个字符。如果s1 的第 j 个字符与 s3 的第(i + j)个字符

   相等,只需能交错组成s3 的 前 (i + j-1) 个字符,由于 s1 的第 j 个字符用于组成s3 的第(i + j)个字符,所以需要dp[i][j-1

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值