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.

方法一: DFS,大数据超时

class Solution {
public:
bool dfs(int i1, int i2, int i3, string &s1, string &s2, string &s3)
{ if(i1 == size1 && i2 == size2 ) return true; if(i1 == size1){
if(s2[i2] == s3[i3])
return dfs(i1,i2+, i3+, s1, s2, s3);
else
return false; }else if(i2 == size2){
if(s1[i1] == s3[i3])
return dfs(i1+, i2, i3+, s1, s2, s3);
else
return false ; }else{
bool f1, f2;
if(s1[i1] == s3[i3])
{ f1 = dfs(i1+, i2, i3+, s1, s2, s3);
if(f1 == true) return true ;
}
if(s2[i2] == s3[i3])
{
f2 = dfs(i1,i2+, i3+, s1, s2, s3); return f2;
}
return false; } }
bool isInterleave(string s1, string s2, string s3) {
// Start typing your C/C++ solution below
// DO NOT write int main() function
size1 = s1.size();
size2 = s2.size();
size3 = s3.size();
if(size1 + size2 != size3 ) return false; return dfs(,,, s1, s2, s3) ; }
private:
int size1;
int size2;
int size3;
};

方法二: 2D 动态规划

Use match[i][j] to save if s1[i] or s2[j] are matched s3[i+j].

match[i][j] =   (s3[i+j]==s1[i]  && match[i-1][j])
                    || (s3[i+j] ==s2[j] && match[i][j-1])

class Solution {
public: bool isInterleave(string s1, string s2, string s3) {
// Start typing your C/C++ solution below
// DO NOT write int main() function
size1 = s1.size();
size2 = s2.size();
size3 = s3.size();
if(size1 + size2 != size3 ) return false; vector<vector<bool>> match( size1+, vector<bool>(size2+)) ; match[][] = true; for(int i = ; i <= size1 ; i++)
{
if(s1[i-] == s3[i-])
match[i][] = true;
else
break;
} for(int j = ; j <= size2 ; j++)
{
if(s2[j-] == s3[j-])
match[][j] = true;
else
break;
} int i,j;
for(i = ; i <= size1 ; i++)
for(j = ; j <= size2; j++)
{
match[i][j] =( match[i-][j]&&s1[i-] == s3[i+j-]) ||
(match[i][j-] && s2[j-] == s3[i+j-]) ;
} return match[size1][size2] ; }
private:
int size1;
int size2;
int size3;
};

LeetCode_Interleaving String的更多相关文章

  1. 透过WinDBG的视角看String

    摘要 : 最近在博客园里面看到有人在讨论 C# String的一些特性. 大部分情况下是从CODING的角度来讨论String. 本人觉得非常好奇, 在运行时态, String是如何与这些特性联系上的 ...

  2. JavaScript String对象

    本编主要介绍String 字符串对象. 目录 1. 介绍:阐述 String 对象的说明以及定义方式. 2. 实例属性:介绍 String 对象的实例属性: length. 3. 实例方法:介绍 St ...

  3. ElasticSearch 5学习(9)——映射和分析(string类型废弃)

    在ElasticSearch中,存入文档的内容类似于传统数据每个字段一样,都会有一个指定的属性,为了能够把日期字段处理成日期,把数字字段处理成数字,把字符串字段处理成字符串值,Elasticsearc ...

  4. [C#] string 与 String,大 S 与小 S 之间没有什么不可言说的秘密

    string 与 String,大 S 与小 S 之间没有什么不可言说的秘密 目录 小写 string 与大写 String 声明与初始化 string string 的不可变性 正则 string ...

  5. js报错: Uncaught RangeError: Invalid string length

    在ajax请求后得到的json数据,遍历的时候chrome控制台报这个错误:Uncaught RangeError: Invalid string length,在stackoverflow查找答案时 ...

  6. c# 字符串连接使用“+”和string.format格式化两种方式

    参考文章:http://www.liangshunet.com/ca/201303/218815742.htm 字符串之间的连接常用的两种是:“+”连接.string.format格式化连接.Stri ...

  7. 【手记】注意BinaryWriter写string的小坑——会在string前加上长度前缀length-prefixed

    之前以为BinaryWriter写string会严格按构造时指定的编码(不指定则是无BOM的UTF8)写入string的二进制,如下面的代码: //将字符串"a"写入流,再拿到流的 ...

  8. JavaScript中String对象的方法介绍

    1.字符方法 1.1 charAt() 方法,返回字符串中指定位置的字符. var question = "Do you like JavaScript?"; alert(ques ...

  9. 在多线程编程中lock(string){...}隐藏的机关

    常见误用场景:在订单支付环节中,为了防止用户不小心多次点击支付按钮而导致的订单重复支付问题,我们用 lock(订单号) 来保证对该订单的操作同时只允许一个线程执行. 这样的想法很好,至少比 lock( ...

随机推荐

  1. cygwin安装与使用

    cygwin安装很简单,下载运行setup.exe程序,一步一步就可以了. 具体安装细节参考:http://www.33lc.com/article/7276.html 安装完成后有如下问题: 在cm ...

  2. Hive 2、Hive 的安装配置(本地MySql模式)

    一.前提条件 安装了Zookeeper.Hadoop HDFS HA  安装方法: http://www.cnblogs.com/raphael5200/p/5154325.html 二.安装Mysq ...

  3. Unity UI和引用的管理中心

    我们来谈谈Unity的UI, 通常会写一些UI页面,当A页面需要去操作B页面的时候. 至少要获取B页面的引用吧! 一般新人都会在组件的写一个public GameObject UIB页面的属性, 然后 ...

  4. New Year Transportation(水)

    New Year Transportation Time Limit:2000MS     Memory Limit:262144KB     64bit IO Format:%I64d & ...

  5. To Miss Our Children Time(dp)

    To Miss Our Children Time Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65768/65768 K (Jav ...

  6. CodeForces 158 B. Taxi(模拟)

    [题目链接]click here~~ [题目大意]n组团体去包车,每组团体的人数<=4,一辆车最多容纳4人,求所求车的数目最小 [解题思路]:思路见代码~~ // C #ifndef _GLIB ...

  7. Oracle varchar 字段排序问题

    数据库字段: 想要的结果: 实际查询的结果: 解决方法:使用CAST函数把varchar2转为int类型 order by CAST(CODE AS INTEGER)

  8. Vijos1051. 送给圣诞夜的极光

    试题请參见: https://vijos.org/p/1051 题目概述 圣诞老人回到了北极圣诞区, 已经快到12点了. 也就是说极光表演要開始了. 这里的极光不是极地特有的自然极光景象. 而是圣诞老 ...

  9. Vs2012于Linux应用程序开发(2):图案

    1.1     代码提示功能 在vs中开发中,Visual Assist是一个很优秀的插件,我们仍然能够使用它进行代码的分析,但它仅仅能支持vcxprojproject,因而我们选择对vcxproj的 ...

  10. 状态模式----C++实现

    状态模式 定义: 允许一个对象在其内部状态改变时改变它的行为.对象看起来似乎修改了它的类. 实用性: 1. 一个对象的行为取决于它的状态,并且它必须在运行时刻根据状态改变它的行为. 2. 一个操作中含 ...