https://oj.leetcode.com/problems/interleaving-string/

刚开始用递归做,但是超时了

class Solution {
public:
bool flag; bool isInterleave(string s1, string s2, string s3) {
flag = false;
if(s1.size() + s2.size() != s3.size())
return flag; subIsInterleave(s1,s2,s3,,,);
return flag;
} void subIsInterleave(string &s1, string &s2, string &s3, int p1, int p2, int p3)
{
if(p1 == s1.size() && p2 == s2.size() && p3 == s3.size())
{
flag = true;
return;
}
if(!(p1 <= s1.size() && p2 <= s2.size() && p3 < s3.size()))
return; if(s3[p3] != s1[p1] && s3[p3] != s2[p2])
{
return;
}
if(p1 < s1.size() && s3[p3] == s1[p1] && flag == false)
subIsInterleave(s1,s2,s3,p1 + , p2,p3 + );
if(p2 < s2.size() && s3[p3] == s2[p2] && flag == false)
subIsInterleave(s1,s2,s3,p1,p2+,p3 + );
}
};

按照二维动态规划的思路,用两层for循环做

记 flag[i][j] 为 s1[0,i] s2[0,j] 匹配 s3[0,i+j] 则:

flag[i][j] = s1[i-1] == s3[i+j-1] && flag[i-1][j]  || s2[j-1] == s3[i+j-1] && flag[i][j-1];

代码如下:

class Solution {
public:
bool isInterleave(string s1, string s2, string s3) {
if(s3.size() != s1.size() + s2.size())
return false; vector<vector<bool> > flag(s1.size()+, vector<bool>(s2.size()+, true)); // init
for(int i = ; i < s1.size() + ; i++)
flag[i][] = flag[i-][] && (s1[i-] == s3[i-]);
for(int j = ; j < s2.size() + ; j++)
flag[][j] = flag[][j-] && (s2[j-] == s3[j-]); for(int i = ; i < s1.size() + ; i++)
for(int j = ; j < s2.size() + ; j++)
{
flag[i][j] = ((s1[i-] == s3[i+j-]) && flag[i-][j]) || ((s2[j-] == s3[i+j-]) && flag[i][j-]);
}
return flag[s1.size()][s2.size()];
}
};

LeetCode OJ-- Interleaving String **@的更多相关文章

  1. 【leetcode】Interleaving String

    Interleaving String Given s1, s2, s3, find whether s3 is formed by the interleaving of s1 and s2. Fo ...

  2. [LeetCode] 97. Interleaving String 交织相错的字符串

    Given s1, s2, s3, find whether s3 is formed by the interleaving of s1and s2. Example 1: Input: s1 = ...

  3. [Leetcode][JAVA] Interleaving String

    Given s1, s2, s3, find whether s3 is formed by the interleaving of s1 and s2. For example,Given:s1 = ...

  4. 【leetcode】 Interleaving String (hard)

    Given s1, s2, s3, find whether s3 is formed by the interleaving of s1 and s2. For example,Given:s1 = ...

  5. leetcode 97 Interleaving String ----- java

    Given s1, s2, s3, find whether s3 is formed by the interleaving of s1 and s2. For example,Given:s1 = ...

  6. [leetcode]97. Interleaving String能否构成交错字符串

    Given s1, s2, s3, find whether s3 is formed by the interleaving of s1 and s2. Input: s1 = "aabc ...

  7. Java for LeetCode 097 Interleaving String 【HARD】

    Given s1, s2, s3, find whether s3 is formed by the interleaving of s1 and s2. For example, Given: s1 ...

  8. Leetcode#97 Interleaving String

    原题地址 转化为二维地图游走问题. 比如s1="abab",s2="aab",s3="aabaabb",则有如下地图,其中"^&q ...

  9. 【LeetCode OJ】Interleaving String

    Problem Link: http://oj.leetcode.com/problems/interleaving-string/ Given s1, s2, s3, find whether s3 ...

  10. [LeetCode] Interleaving String - 交织的字符串

    题目如下:https://oj.leetcode.com/problems/interleaving-string/ Given s1, s2, s3, find whether s3 is form ...

随机推荐

  1. LRU算法原理解析

    LRU是Least Recently Used的缩写,即最近最少使用,常用于页面置换算法,是为虚拟页式存储管理服务的. 现代操作系统提供了一种对主存的抽象概念虚拟内存,来对主存进行更好地管理.他将主存 ...

  2. 基于Ajax提交formdata数据、错误信息展示和局部钩子、全局钩子的校验。

    formdata重点: 实例化FormData这个类 循环serializeArray可以节省代码量 图片要用$('#id')[0].files[0]来获得 加上contentType:false和p ...

  3. 笔记-爬虫-robots.txt

    笔记-爬虫-robots.txt 1.      robots.txt文件简介 1.1.    是什么 robots.txt是用来告诉搜索引擎网站上哪些内容可以被访问.哪些不能被访问.当搜索引擎访问一 ...

  4. HBase(0.94.5)的Compact和Split源码分析

    经过对比,0.94.5以后版本主要过程基本类似(有些新功能和细节增加) 一.       Compact 2.1.   Compact主要来源 来自四个方面:1.Memstoreflush时:2.HR ...

  5. Android开发——网易云音乐使用的开源组件集合

    前言 网易云音乐Android版从第一版使用到现在,全新的 Material Design 界面,更加清新.简洁.同样也是音乐播放器开发者,我们确实需要思考,相同的功能,会如何选择.感谢开源,让我们有 ...

  6. TCP/IP网络编程之套接字与标准I/O

    标准I/O函数 标准标准I/O函数有两个优点: 标准I/O函数具有良好的移植性 标准I/O函数可以利用缓冲提高性能 关于移植性无需过多解释,不仅是I/O函数,所有标准函数都具有良好的移植性.因为,为了 ...

  7. Java中BigInteger类型

    BigInteger是java.math包提供的处理大整数类型,实现了大整数的存储,四则运算,判断素数的方法,求幂,求模,求逆元,求最大公约数等方法.本文主要分析下BigInteger对于大整数的存储 ...

  8. loj2090 「ZJOI2016」旅行者

    分治+最短路,很套路的 #include <algorithm> #include <iostream> #include <cstring> #include & ...

  9. java web知识点

    java web知识点 1.Java知识点 基本数据类型,面向对象,异常,IO,NIO,集合,多线程,JVM,高级特性. 2.web知识点 JSP,Serlvet,JDBC,Http 掌握Cookie ...

  10. 【Maximal Rectangle】cpp

    题目: Given a 2D binary matrix filled with 0's and 1's, find the largest rectangle containing all ones ...