#29 Interleaving String

原创 2016年08月30日 13:01:46

题目描述:

Given three strings: s1s2s3, determine whether s3 is formed by the interleaving of s1 and s2.

Example

For s1 = "aabcc", s2 = "dbbca"

  • When s3 = "aadbbcbcac", return true.
  • When s3 = "aadbbbaccc", return false.
Challenge 

O(n2) time or better

题目思路:

这题也是经典的dp之一。我们可以设dp[i][j]为s1前i-1个char和s2前j-1个char是s3 i+j-1的interleaving。那么,dp方程为dp[i][j]为true的选择有两种:一种是dp[i-1][j]为true并且s1的第i个char和s3的第i+j个char相等;还有一种是p[i][j-1]为true并且s2的第j个char和s3的第i+j个char相等。

Mycode(AC = 23ms):

class Solution {
public:
    /**
     * Determine whether s3 is formed by interleaving of s1 and s2.
     * @param s1, s2, s3: As description.
     * @return: true of false.
     */
    bool isInterleave(string s1, string s2, string s3) {
        // write your code here
        if (s1.size() + s2.size() != s3.size()) return false;
        
        vector<vector<bool>> dp(s1.size() + 1, vector<bool>(s2.size() + 1, false));
        
        dp[0][0] = true;
        // initialize dp[i][0] and dp[0][i]
        for (int i = 1; i <= s1.size(); i++) {
            dp[i][0] = dp[i - 1][0] && s3[i - 1] == s1[i - 1];
        }
        for (int i = 1; i <= s2.size(); i++) {
            dp[0][i] = dp[0][i - 1] && s3[i - 1] == s2[i - 1];
        }
        
        // do dp
        for (int i = 1; i <= s1.size(); i++) {
            for (int j = 1; j <= s2.size(); j++) {
                dp[i][j] = (dp[i][j - 1] && s2[j - 1] == s3[i + j - 1]) ||
                           (dp[i - 1][j] && s1[i - 1] == s3[i + j - 1]);
            }
        }
        
        return dp[s1.size()][s2.size()];
    }
};


版权声明:三千微尘里,吾宁爱与憎

Interleaving String(交叉字符串)

Given s1, s2, s3, find whether s3 is formed by the interleaving of s1 and s2. For example, Given: s...
  • cow__sky
  • cow__sky
  • 2014年03月25日 18:28
  • 604

【动态规划+滚动数组】Interleaving String

题目:leetcode Interleaving String   Given s1, s2, s3, find whether s3 is formed by the in...
  • bupt8846
  • bupt8846
  • 2015年04月10日 18:05
  • 377

《笨办法学Python》 第29课手记

《笨办法学Python》 第29课手记本节课讲if语句。本节内容比较简单,如果觉得你的代码没有错误,但运行时报错,那么你的代码肯定有错误。相信我解释器是已经设定好的,它出错的概率可以认为是零。比较容易...
  • Solo95
  • Solo95
  • 2016年01月31日 22:21
  • 451

剑指Offer:面试题29——数组中出现次数超过一半的数字(java实现)

PS:在前几天的面试中,被问到了这个题。然而当时只能用最低效的方法来解。问题描述: 数组中有一个数字出现的次数超过数组长度的一半,请找出这个数字。例如输入一个长度为9的数组{1,2,3,2,2,2...
  • lilianforever
  • lilianforever
  • 2016年07月08日 11:34
  • 1115

苹果应用图标自动创建

最近在做接入工作,需要不同应用接入不同的icon,为了减少麻烦,决定使用Images.xcassets的方式来调用icon,脚本使用nodejs来生成对应尺寸的icon的图标。首先建立需要导出的ico...
  • zhaoxiaofeng44
  • zhaoxiaofeng44
  • 2017年01月03日 19:04
  • 126

win7中如何解决“该项不适用于在指定状态下使用”

无论什么系统解决方式基本是一致的,只是进入文件夹的名称略有不同。 产生问题的原因 由于用户更改了管理员身份进入的密码造成的。密码改变后VS的操作环境有变化就无法继续工作。所以在安装其他软件过程中会...
  • heyu1992312
  • heyu1992312
  • 2015年01月13日 14:53
  • 1446

Python 小甲鱼教程 课后练习29

题目要求如下:写一个程序,比较2个文本的内容,如果不同,显示不同的行数 def comp():  file1=input('please enter first name: ')  file2=in...
  • bestallen
  • bestallen
  • 2016年07月14日 15:15
  • 1263

两个字符串交叉得到的字符串 Interleaving String @LeetCode

同 《DP33 两个字符串交叉得到的字符串 Find if a string is interleaved of two other strings @geeksforgeeks》 pack...
  • hellobinfeng
  • hellobinfeng
  • 2014年01月01日 04:29
  • 2028

leetcode:Interleaving String 使用动态规划求解的java源代码

Given s1, s2, s3, find whether s3 is formed by the interleaving of s1 and s2. For example, Given...
  • tingting256
  • tingting256
  • 2015年09月28日 14:24
  • 221

判断一个字符串是否是有其他两个字符串交错构成的(Interleaving String)

举个例子: s1 = “aabcc”, s2 = “dbbca”,如果 s3 = “aadbbcbcac”, return true. 如果 s3 = “aadbbbaccc”, return ...
  • guoyuguang0
  • guoyuguang0
  • 2016年03月30日 17:56
  • 288
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:#29 Interleaving String
举报原因:
原因补充:

(最多只允许输入30个字)