[LeetCode] - Interleaving String
2014-01-28 13:25
387 查看
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题目,递推式写在代码里面了。有了递推式,建起table,然后bottom-up顺着把table填满就行了。string的题目在建table的时候,一般都把table的size弄成string的长度加1,这样处理最开始的元素的时候方便一些,但是要注意给table中相应的位置赋上合适的初始值。
代码如下:
// inter[i][j] -> s3.substring(i+j) is interleaving string or not
// inter[i][j] = (inter[i-1][j]&&s1(i)==s3(i+j)) || (inter[i][j-1]&&s2(j)==s3(i+j))
public class Solution {
public boolean isInterleave(String s1, String s2, String s3) {
if(s1==null && s2==null) return s3==null;
if(s1==null && s2!=null) return s2.equals(s3);
if(s1!=null && s2==null) return s1.equals(s3);
if(s1!=null && s2!=null && s3==null) return false;
if(s1.length()+s2.length()!=s3.length()) return false;
if(s1.length()==0) return s2.equals(s3);
if(s2.length()==0) return s1.equals(s3);
boolean[][] inter = new boolean[s1.length()+1][s2.length()+1];
inter[0][0] = true;
for(int i=1; i<=s2.length(); i++) {
inter[0][i] = (s2.substring(0, i).equals(s3.substring(0, i)));
}
for(int j=1; j<=s1.length(); j++) {
inter[j][0] = (s1.substring(0, j).equals(s3.substring(0, j)));
}
for(int i=1; i<=s1.length(); i++) {
for(int j=1; j<=s2.length(); j++) {
boolean temp1 = (inter[i-1][j] && s1.charAt(i-1)==s3.charAt(i+j-1));
boolean temp2 = (inter[i][j-1] && s2.charAt(j-1)==s3.charAt(i+j-1));
inter[i][j] = temp1 || temp2;
}
}
return inter[s1.length()][s2.length()];
}
}
For example,
Given:
s1 =
"aabcc",
s2 =
"dbbca",
When s3 =
"aadbbcbcac", return true.
When s3 =
"aadbbbaccc", return false.
DP题目,递推式写在代码里面了。有了递推式,建起table,然后bottom-up顺着把table填满就行了。string的题目在建table的时候,一般都把table的size弄成string的长度加1,这样处理最开始的元素的时候方便一些,但是要注意给table中相应的位置赋上合适的初始值。
代码如下:
// inter[i][j] -> s3.substring(i+j) is interleaving string or not
// inter[i][j] = (inter[i-1][j]&&s1(i)==s3(i+j)) || (inter[i][j-1]&&s2(j)==s3(i+j))
public class Solution {
public boolean isInterleave(String s1, String s2, String s3) {
if(s1==null && s2==null) return s3==null;
if(s1==null && s2!=null) return s2.equals(s3);
if(s1!=null && s2==null) return s1.equals(s3);
if(s1!=null && s2!=null && s3==null) return false;
if(s1.length()+s2.length()!=s3.length()) return false;
if(s1.length()==0) return s2.equals(s3);
if(s2.length()==0) return s1.equals(s3);
boolean[][] inter = new boolean[s1.length()+1][s2.length()+1];
inter[0][0] = true;
for(int i=1; i<=s2.length(); i++) {
inter[0][i] = (s2.substring(0, i).equals(s3.substring(0, i)));
}
for(int j=1; j<=s1.length(); j++) {
inter[j][0] = (s1.substring(0, j).equals(s3.substring(0, j)));
}
for(int i=1; i<=s1.length(); i++) {
for(int j=1; j<=s2.length(); j++) {
boolean temp1 = (inter[i-1][j] && s1.charAt(i-1)==s3.charAt(i+j-1));
boolean temp2 = (inter[i][j-1] && s2.charAt(j-1)==s3.charAt(i+j-1));
inter[i][j] = temp1 || temp2;
}
}
return inter[s1.length()][s2.length()];
}
}
相关文章推荐
- Double 浮点小数相加减乘除
- CentOS 6.3下部署LVS(NAT)+keepalived实现高性能高可用负载均衡
- 各种数据库连接
- 第四章 禅坐和外相的修行
- 2013年度工作学习总结报告
- VBX 如何使虚拟机支持多核
- 预编译的作用
- 踢猫效应的故事
- RPM方式安装MySQL5.6
- 运算符重载 hash原理 Equals方法
- unknow table alarmtemp error when drop database (mysql)
- 图形化的机房综合资源理系统的查询与统计
- 选择、分组、引用,指定匹配的位置
- 第一篇博客就这么开始了
- PAT_1072 Gas Station
- 常用的查看数据库的SQL
- windows下编译libuv
- 谷歌中一些十分有趣的特效现象
- Gas Station
- gemfire中遇到的问题集