博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
【leetcode】 Interleaving String (hard)
阅读量:5223 次
发布时间:2019-06-14

本文共 1398 字,大约阅读时间需要 4 分钟。

Given s1s2s3, 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.

 

思路:做过几道动态规划了,终于也有了点感觉。一次就AC了,好开心啊~

用dp[m][n]来存储s3[0 ~ m+n-1]是否是s1[0~m-1]与s2[0~n-1]交替组成的。注意,没有必要存s3的维度,因为s1[0~m-1]与s2[0~n-1]只能匹配s3的m+n个字符,即第三个维度是确定的。

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]

class Solution {public:    bool isInterleave(string s1, string s2, string s3) {        int len1 = s1.length();        int len2 = s2.length();        int len3 = s3.length();        if(len3 != len1 + len2)            return false;        vector
> dp(len1 + 1, vector
(len2 + 1, false)); dp[0][0] = true; for(int i = 1; i < len1 + 1; i++) { dp[i][0] = dp[i-1][0] && (s1[i-1] == s3[i-1]); } for(int j = 1; j < len2 + 1; j++) { dp[0][j] = dp[0][j-1] && (s2[j-1] == s3[j-1]); } for(int i = 1; i < len1 + 1; i++) { for(int j = 1; j < len2 + 1; 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])); } } return dp[len1][len2]; }};

 

转载于:https://www.cnblogs.com/dplearning/p/4180319.html

你可能感兴趣的文章
python学习笔记--装饰器
查看>>
发布一个JavaScript工具类库jutil,欢迎使用,欢迎补充,欢迎挑错!
查看>>
discuz 常用脚本格式化数据
查看>>
MS CRM 2011 创建基于Fetch的报表 -- 进阶版
查看>>
洛谷P2777
查看>>
PHPStorm2017设置字体与设置浏览器访问
查看>>
SQL查询总结 - wanglei
查看>>
安装cocoa pods时出现Operation not permitted - /usr/bin/xcodeproj的问题
查看>>
makefile中使用变量
查看>>
GIT笔记:将项目发布到码云
查看>>
JavaScript:学习笔记(7)——VAR、LET、CONST三种变量声明的区别
查看>>
JavaScript 鸭子模型
查看>>
PHP典型功能与Laravel5框架开发学习笔记
查看>>
SQL Server 如何查询表定义的列和索引信息
查看>>
项目上传到github上
查看>>
GCD 之线程死锁
查看>>
NoSQL数据库常见分类
查看>>
JS小工具_字符串转16进制数组_02
查看>>
信息安全系统设计基础实验四—20135214万子惠20135227黄晓妍
查看>>
一题多解 之 Bat
查看>>