【leetcode】Interleaving String
2015-08-19 17:34
183 查看
from:https://leetcode.com/problems/interleaving-string/
Given s1, s2, s3, find whether s3 is formed by the interleaving of s1 and s2.
For example,
Given:
s1 =
s2 =
When s3 =
When s3 =
思路:
DP:
![](http://img.blog.csdn.net/20150819172353367)
dp[a][b]意义,sa[0:a]与sb[0:b]是否能构成s[0:a+b]相等。(左开右闭)
例如,dp[1][0]= true,表示sa中子串“a”和b中“”可以构成s中“a”相等。
dp[1][1],表示“a”与“d”是否能表示成“aa”。
递推公式:
对于k=a+b,
(1)当sa[a-1]=s[k-1],那么dp[a][b] = dp[a][b] || dp[a-1][b]
(2)当sb[b-1]=s[k-1],那么dp[a][b] = dp[a][b] || dp[a][b-1]
对于(1),当sa中的字符对应了当前的s中的字符,那么dp[a][b]与dp[a][b-1]无关,因为对于s[0,a+b],只能由s[0, a+b-1]和一个sa中字符或者sb中字符匹配,如果选择了s[0,a+b]选择与sa[a-1]中字符匹配,那么其之前的s[0,
a+b-1]必然没有选择sa[a-1]。
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:
dp[a][b]意义,sa[0:a]与sb[0:b]是否能构成s[0:a+b]相等。(左开右闭)
例如,dp[1][0]= true,表示sa中子串“a”和b中“”可以构成s中“a”相等。
dp[1][1],表示“a”与“d”是否能表示成“aa”。
递推公式:
对于k=a+b,
(1)当sa[a-1]=s[k-1],那么dp[a][b] = dp[a][b] || dp[a-1][b]
(2)当sb[b-1]=s[k-1],那么dp[a][b] = dp[a][b] || dp[a][b-1]
对于(1),当sa中的字符对应了当前的s中的字符,那么dp[a][b]与dp[a][b-1]无关,因为对于s[0,a+b],只能由s[0, a+b-1]和一个sa中字符或者sb中字符匹配,如果选择了s[0,a+b]选择与sa[a-1]中字符匹配,那么其之前的s[0,
a+b-1]必然没有选择sa[a-1]。
public class Solution { public boolean isInterleave(String sa, String sb, String s) { int la=sa.length(), lb=sb.length(), ls=s.length(); if(la + lb != ls) { return false; } boolean[][] dp = new boolean[la+1][lb+1]; dp[0][0] = true; for(int a=1; a<=la; ++a) { if(sa.charAt(a-1) == s.charAt(a-1)) dp[a][0] = true; else break; } for(int b=1; b<=lb; ++b) { if(sb.charAt(b-1) == s.charAt(b-1)) dp[0][b] = true; else break; } for(int a=1; a<=la; ++a) { for(int b=1; b<=lb; ++b) { int k = a+b; if(sa.charAt(a-1) == s.charAt(k-1)) dp[a][b] = dp[a-1][b] || dp[a][b]; if(sb.charAt(b-1) == s.charAt(k-1)) dp[a][b] = dp[a][b-1] || dp[a][b]; } } return dp[la][lb]; } }
相关文章推荐
- expdp\impdp及exp\imp
- uva11040
- ZoneDateTime 用法摘要
- 开发自己的Openfire插件
- 计算日期到天数转换
- HDUOJ_1874(畅通工程续)(spfa)
- Javascript Garden
- 通过RTLabel、RCLabel、FTCoreText及webView结合SDWebImage等4种方式实现左滑或下拉中cell中图文混排使用场景方案
- QQ群共享文件下载很慢解决办法
- oracle导入数据库步骤--impdp
- Android内存分析工具(二):DDMS
- POJ 2503 Babelfish qsort+bserach
- matlab与.net混合编程
- leetcode:Reverse Nodes in k-Group
- 欢迎使用CSDN-markdown编辑器
- AVAudioRecorder录音处理
- umeng
- Exchange 2016之如何在EAC导出导入PST文件
- 输入年、月、日,计算其为星期几
- Masonry入门教程