
Leetcode-Interleaving String
检查长度:首先,检查 初始化动态规划表:创建一个二维数组 填充边界条件: 状态转移:对于每个 返回结果:最终返回 长度检查:首先检查 动态规划表初始化:创建一个二维数组 填充边界条件:填充 状态转移:遍历每个 返回结果:最终返回
发布日期:2025-04-05 03:03:52
浏览次数:13
分类:精选文章
本文共 2050 字,大约阅读时间需要 6 分钟。
要判断一个字符串 s3
是否是由两个字符串 s1
和 s2
交替组成,可以使用动态规划的方法。以下是详细的步骤:
方法思路
s3
的长度是否等于 s1
和 s2
的长度之和。如果不等,直接返回 false
。dp
,大小为 (len1 + 1) x (len2 + 1)
,用于存储状态。dp[i][j]
表示前 i
个字符来自 s1
,前 j
个字符来自 s2
的情况下,是否可以组成 s3
的前 i + j
个字符。dp[0][0]
初始化为 true
,表示空字符串可以组成空字符串。然后依次填充 i=0
的行和 j=0
的列。i
和 j
,检查 s3[i + j - 1]
是否等于 s1[i - 1]
或 s2[j - 1]
,并根据前一个状态的值来更新当前状态。dp[len1][len2]
的值,即是否可以交替组成 s3
。解决代码
public class Solution { public boolean isInterleave(String s1, String s2, String s3) { int len1 = s1.length(); int len2 = s2.length(); int len3 = s3.length(); // 检查总长度是否正确 if (len3 != len1 + len2) { return false; } // 初始化动态规划表 boolean[][] dp = new boolean[len1 + 1][len2 + 1]; dp[0][0] = true; // 填充i=0的情况 for (int j = 1; j <= len2; j++) { if (dp[0][j - 1] && s3.charAt(j - 1) == s2.charAt(j - 1)) { dp[0][j] = true; } else { dp[0][j] = false; } } // 填充j=0的情况 for (int i = 1; i <= len1; i++) { if (dp[i - 1][0] && s3.charAt(i - 1) == s1.charAt(i - 1)) { dp[i][0] = true; } else { dp[i][0] = false; } } // 填充主体部分 for (int i = 1; i <= len1; i++) { for (int j = 1; j <= len2; j++) { int currentPos = i + j - 1; boolean canComeFromLeft = dp[i - 1][j] && s3.charAt(currentPos) == s1.charAt(i - 1); boolean canComeFromRight = dp[i][j - 1] && s3.charAt(currentPos) == s2.charAt(j - 1); dp[i][j] = canComeFromLeft || canComeFromRight; } } return dp[len1][len2]; }}
代码解释
s3
的长度是否等于 s1
和 s2
的长度之和,如果不等,直接返回 false
。dp
,大小为 (len1 + 1) x (len2 + 1)
,并初始化 dp[0][0]
为 true
。i=0
的行和 j=0
的列,分别表示只使用 s2
和 s1
来组成 s3
的情况。i
和 j
,检查当前字符是否匹配,并根据前一个状态的值更新当前状态。dp[len1][len2]
的值,表示是否可以交替组成 s3
。发表评论
最新留言
做的很好,不错不错
[***.243.131.199]2025年05月12日 14时01分51秒
关于作者

喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
Docker部署postgresql-11以及主从配置
2025-03-28
EnvironmentNotWritableError: The current user does not have write permissions to the target environm
2025-03-28
kali安装docker(亲测有效)
2025-03-28
PHP系列:PHP 基础编程 2(时间函数、数组---实现登录&注册&修改)
2025-03-28
PHP系列:使用PHP实现登录注册功能的完整指南
2025-03-28
04-docker-commit构建自定义镜像
2025-03-28
05-docker系列-使用dockerfile构建镜像
2025-03-28
09-docker系列-docker网络你了解多少(下)
2025-03-28
#C8# UVM中的factory机制 #S8.2.3# 重载sequence哪些情形
2025-03-29
cytoscape安装java_Cytoscape史上最全攻略
2025-03-29
c语言编写单片机中断,C语言AVR单片机中断程序写法
2025-03-29
java教学团队管理系统(ssm)
2025-03-29
java教师管理系统(ssm)
2025-03-29
java教师课堂助手app(ssm)
2025-03-29
java教育辅导班信息网(ssm)
2025-03-29
DDNS动态域名无固定IPSEC配置实战
2025-03-29
DELL笔记本UEFI+GPT安装window10与Ubuntu双系统
2025-03-29
EasyUi的使用与代码编写(一)
2025-03-29
Ehcache Java开源缓存框架
2025-03-29
el-select下拉框修改背景色
2025-03-29