[Leetcode][JAVA] Interleaving String
2024-08-25 17:14:04
Given s1, s2, s3, find whether s3 is formed by the interleaving of s1 and s2.
For example,
Given:
s1 = "aabcc"
,
s2 = "dbbca"
,
When s3 = "aadbbcbcac"
, return true.
When s3 = "aadbbbaccc"
, return false.
使用DP, 过程如下图所示:
S2 |
|||||||
S1 |
aadbbcbcac |
0 “” |
1 d |
2 db |
3 dbb |
4 dbbc |
5 dbbca |
0 “” |
T |
F(d!=a) |
F |
F |
F |
F |
|
1 a |
T(a==a) |
F(aa) |
F |
F |
F |
F |
|
2 aa |
T |
T(aad) |
T(aadb) |
||||
3 aab |
F(aab!=aad) |
T(aadb) |
T(aadbb) |
||||
4 aabc |
F |
F(aadbb) |
T(aadbbc) |
||||
5 aabcc |
F |
F(aadbbc) |
发现某一格dp[i][j]为true只有当其上面或左边为true才行。且需要新加入的字母与s3新添加的字母一致,True状态才能延续。
代码:
public boolean isInterleave(String s1, String s2, String s3) {
int l1=s1.length();
int l2=s2.length();
int l3=s3.length();
if(l1+l2!=l3)
return false;
boolean[][] dp = new boolean[l1+1][l2+1];
for(int i=0;i<=l1;i++) {
for(int j=0;j<=l2;j++) {
if(i==0 && j==0)
dp[i][j]=true;
else if(i==0)
dp[i][j] = dp[i][j-1] && (s2.charAt(j-1)==s3.charAt(i+j-1));
else if(j==0)
dp[i][j] = dp[i-1][j] && (s1.charAt(i-1)==s3.charAt(i+j-1));
else
dp[i][j] = (dp[i][j-1] && (s2.charAt(j-1)==s3.charAt(i+j-1))) || (dp[i-1][j] && (s1.charAt(i-1)==s3.charAt(i+j-1)));
}
}
return dp[l1][l2];
}
简化为一维数组:
public boolean isInterleave(String s1, String s2, String s3) {
int l1 = s1.length();
int l2 = s2.length();
int l3 = s3.length();
if(l3!=(l1+l2))
return false;
boolean[] dp = new boolean[l2+1];
dp[0] = true;
for(int i=1;i<dp.length;i++)
{
dp[i] = dp[i-1] && (s2.charAt(i-1)==s3.charAt(i-1));
}
for(int i=1;i<=l1;i++)
{
for(int j=0;j<dp.length;j++)
{
if(j==0)
dp[j] = dp[j] && (s1.charAt(i-1)==s3.charAt(i-1));
else
dp[j] = (dp[j] && (s1.charAt(i-1)==s3.charAt(i+j-1))) || (dp[j-1] && (s2.charAt(j-1)==s3.charAt(i+j-1)));
}
} return dp[l2];
}
最新文章
- 练习:python 操作Mysql 实现登录验证 用户权限管理
- 解决java.io.IOException: HTTPS hostname wrong: should be
- Java线程间通信方式剖析——Java进阶(四)
- [Android基础论]为何Activity退出之后,系统没有调用onDestroy方法?
- Restful.Data v1.0 - 轻量级数据持久层组件, 正式开源发布了
- SQL Server代理(7/12):作业活动监视器
- ettercap ARP dns 欺骗
- scala学习笔记(4):占位符
- 实用CSS3属性之 :target伪类实现Tab切换效果
- 用QT创建WINDOWS服务程序
- 【源码】canal和otter的高可靠性分析
- springboot + redis缓存使用
- Python图片爬虫
- VISUALSVN: UNABLE TO CONNECT TO A REPOSITORY AT URL 无法连接主机的解决办法
- 单片机如何产生PWM信号
- React——event
- 洛谷 p2066 机器分配(资源型)
- 计算广告学-多点归因模型(Multi-Touch Attribution Model)
- centos 阶段复习 2015-4-6 dd命令 hosts.allow和hosts.deny 啊铭的myssh脚本 清空history命令历史 /dev/zero 零发生器 /dev/null 黑洞 /dev/random 生成随机数 第十一节课
- MVC3 之asp.net 与vb.net 互转练习