[LeetCode]97.Interleaving String

题目

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.

思路

设dp[i][j],表示s1[0,i-1]和s2[0,j-1]交替组成s3[0, i+j-1]。
如果s1[i-1]等于s3[i+j-1],则dp[i][j]=dp[i-1][j];
如果s2[j-1]等于s3[i+j-1],则dp[i][j]=dp[i][j-1]。

因此状态转移方程如下:

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

代码

/*------------------------------------------------
*   日期:2015-03-25
*   作者:SJF0115
*   题目: 97.Interleaving String
*   来源:https://leetcode.com/problems/interleaving-string/
*   结果:AC
*   来源:LeetCode
*   博客:
------------------------------------------------------*/
#include <iostream>
#include <vector>
using namespace std;

class Solution {
public:
    bool isInterleave(string s1, string s2, string s3) {
        int size1 = s1.size();
        int size2 = s2.size();
        int size3 = s3.size();
        if(size1 + size2 < size3){
            return false;
        }//if
        vector<vector<bool> > dp(size1 + 1,vector<bool>(size2 + 1, false));
        dp[0][0] = true;
        // 初始化
        for(int i = 1;i <= size1;++i){
            dp[i][0] = dp[i-1][0] && (s1[i-1] == s3[i-1]);
        }//for
        for(int i = 1;i <= size2;++i){
            dp[0][i] = dp[0][i-1] && (s2[i-1] == s3[i-1]);
        }//for
        for(int i = 1;i <= size1;++i){
            for(int j = 1;j <= size2;++j){
                dp[i][j] = dp[i-1][j] && (s1[i-1] == s3[i+j-1]) ||
                    dp[i][j-1] && (s2[j-1] == s3[i+j-1]);
            }//for
        }//for
        return dp[size1][size2];
    }
};

int main() {
    Solution solution;
    string str1("aabcc");
    string str2("dbbca");
    string str3("aadbbbaccc");
    cout<<solution.isInterleave(str1,str2,str3)<<endl;
    return 0;
}

运行时间

时间: 2024-08-31 11:27:55

[LeetCode]97.Interleaving String的相关文章

[LeetCode] Valid Parenthesis String 验证括号字符串

Given a string containing only three types of characters: '(', ')' and '*', write a function to check whether this string is valid. We define the validity of a string by these rules: Any left parenthesis '(' must have a corresponding right parenthesi

Interleaving String

Dynamic Programming  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 fals

[LeetCode]--344. Reverse String

Write a function that takes a string as input and returns the string reversed. Example: Given s = "hello", return "olleh". public String reverseString(String s) { char[] ss = s.toCharArray(); int j = ss.length - 1, i = 0; char temp; wh

leetcode难度及面试频率

转载自:LeetCode Question Difficulty Distribution               1 Two Sum 2 5 array sort         set Two Pointers 2 Add Two Numbers 3 4 linked list Two Pointers           Math 3 Longest Substring Without Repeating Characters 3 2 string Two Pointers      

LeetCode All in One 题目讲解汇总(持续更新中...)

终于将LeetCode的免费题刷完了,真是漫长的第一遍啊,估计很多题都忘的差不多了,这次开个题目汇总贴,并附上每道题目的解题连接,方便之后查阅吧~ 如果各位看官们,大神们发现了任何错误,或是代码无法通过OJ,或是有更好的解法,或是有任何疑问,意见和建议的话,请一定要在对应的帖子下面评论区留言告知博主啊,多谢多谢,祝大家刷得愉快,刷得精彩,刷出美好未来- 博主制作了一款iOS的应用"Leetcode Meet Me",里面有Leetcode上所有的题目,并且贴上了博主的解法,随时随地都能

LeetCode总结【转】

转自:http://blog.csdn.net/lanxu_yy/article/details/17848219 版权声明:本文为博主原创文章,未经博主允许不得转载. 最近完成了www.leetcode.com的online judge中151道算法题目.除各个题目有特殊巧妙的解法以外,大部分题目都是经典的算法或者数据结构,因此做了如下小结,具体的解题思路可以搜索我的博客:LeetCode题解 题目 算法 数据结构 注意事项 Clone Graph BFS 哈希表 Word Ladder II

Lua中的string库(字符串函数库)总结_Lua

Lua解释器对字符串的支持很有限.一个程序可以创建字符串并连接字符串,但不能截取子串,检查字符串的大小,检测字符串的内容.在Lua中操纵字符串的功能基本来自于string库. 字符串库中的一些函数是非常简单的: string.len(s)          返回字符串s的长度:string.rep(s, n)      返回重复n次字符串s的串:你使用string.rep("a", 2^20)可以创建一个1M bytes的字符串(比如,为了测试需要):string.lower(s)  

.Net下的MSMQ的同步异步调用

一.MSMQ简介 MSMQ(微软消息队列)是Windows操作系统中消息应用程序的基础,是用于创建分布式.松散连接的消息通讯应用程序的开发工具.消息队列 和电子邮件有着很多相似处,他们都包含多个属性,用于保存消息,消息类型中都指出发送者和接收者的地址:然而他们的用处却有着很大的 区别:消息队列的发送者和接收者是应用程序,而电子邮件的发送者和接收者通常是人.如同电子邮件一样,消息队列的发送和接收也不需要 发送者和接收者同时在场,可以存储在消息队列或是邮件服务器中. 二.消息队列的安装 默认情况下安

ASP.Net2.0 GridView 多列排序,显示排序图标,分页

asp.net|分页|排序|显示     最近在使用ASP.net 2.0的GridView 控件时,发现排序与分页功能Microsoft实现的都很简单,比如排序,在点击列名的时候来触发整页的PostBack,然后排序,但是在列头上没有一个显示升序降序的图标,这会让最终用户使用时很迷惑,因为不知道是升序了还是降序了,所以今天首先解决的第一问题就是升序降序在列上显示图标,第二要解决的问题是默认GridView按列排序只能排一列的,也就是不能进行多列排序,而在实际应用中仅仅按照一列来排序是不能满足业