leetcode 97: Interleaving String
2015-08-11 10:10
429 查看
Use DP, the dp[i][j] means if the strings are matched when I take length i of s1 and length j of s2 to compare with length i+j of s3.
class Solution {
public:
bool isInterleave(string s1, string s2, string s3) {
int m=s1.length();
int n=s2.length();
if(m+n!=s3.length())
return 0;
vector<bool> a(n+1,0);
vector<vector<bool> > dp(m+1,a);
dp[0][0]=1;
for(int i=1;i<=m;i++)
dp[i][0]=s1[i-1]==s3[i-1]?dp[i-1][0]:0;
for(int i=1;i<=n;i++)
dp[0][i]=s2[i-1]==s3[i-1]?dp[0][i-1]:0;
for(int i=1;i<=m;i++)
for(int j=1;j<=n;j++)
{
if(s1[i-1]==s3[i+j-1])
dp[i][j]=dp[i-1][j];
if(s2[j-1]==s3[i+j-1])
dp[i][j]=dp[i][j-1]|dp[i][j];
}
return dp[m]
;
}
};
class Solution {
public:
bool isInterleave(string s1, string s2, string s3) {
int m=s1.length();
int n=s2.length();
if(m+n!=s3.length())
return 0;
vector<bool> a(n+1,0);
vector<vector<bool> > dp(m+1,a);
dp[0][0]=1;
for(int i=1;i<=m;i++)
dp[i][0]=s1[i-1]==s3[i-1]?dp[i-1][0]:0;
for(int i=1;i<=n;i++)
dp[0][i]=s2[i-1]==s3[i-1]?dp[0][i-1]:0;
for(int i=1;i<=m;i++)
for(int j=1;j<=n;j++)
{
if(s1[i-1]==s3[i+j-1])
dp[i][j]=dp[i-1][j];
if(s2[j-1]==s3[i+j-1])
dp[i][j]=dp[i][j-1]|dp[i][j];
}
return dp[m]
;
}
};
相关文章推荐
- DIV CSS字体居中实现DIV文字水平左右居中
- 关于自定义属性
- POJ 1836:Alignment
- 【Java】(4)Java注解
- 3D打印机切片引擎CuraEngine源码分析<三> 系列目录
- 菜鸟第一天:Linux OS及常用命令
- 为什么程序员的业余项目大多都死了?
- 数字统计(LeetCode Number of digit One)
- POJ 1836:Alignment
- 最全面的mac下的android studio快捷键
- Codeforces 396B On Sum of Fractions 数论
- 如何用ffmpeg进行Jpeg 或者其它格式图像的扣取
- 100+Android 开源项目分类汇总一(精品 )
- 蜻蜓FM2014年校招笔试题目 - 规则二叉树
- web安全入门资料
- bzoj3289: Mato的文件管理
- Spring中使用Quartz两种实现方式
- 19-集合框架工具类-13-常用对象API(集合框架-工具类-Collections-排序)
- Android 2.0 --- 2.3 API变更概要:
- OpenCV的IplImage转bmp