2021-06-19:交错字符串。 有三个字符串s1,s2,s3。判断s3是否由s1和s2交错组成的。比如s1=“abc“,s2=“123“,s3=“12ab3c“,应该返回true,因为s3去掉12
2021-06-19:交错字符串。 有三个字符串s1,s2,s3。判断s3是否由s1和s2交错组成的。比如s1=“abc”,s2=“123”,s3=“12ab3c”,应该返回true,因为s3去掉123后,剩下的是abc。比如s1=“abc”,s2=“123”,s3=“12ba3c”,应该返回false,因为s3去掉123后,剩下的是bac,顺序不一致,不符合条件。
福大大 答案2021-06-19:
方法一:双指针。表面上可以用这种方法,实际上是不对的。如果回溯,那跟方法二就没区别了,这种方法直接舍弃。
方法二:动态规划,样本对应模型。
dp[i][j]依赖左边和上边。
根据下面的动态规划表格可以看出规律:左对看上等,上对看左等。
状态转移方程我不懂,就不说了。
时间复杂度:O(MN)。
空间复杂度:O(MN)。可优化成O(M)。
代码用golang编写。代码如下:
package main
import "fmt"
func main() {
s1 := "aaabsk"
s2 := "aacfk"
s3 := "aaacaabfskk"
ret := isInterleave(s1, s2, s3)
fmt.Println(ret)
}
func isInterleave(s1 string, s2 string, s3 string) bool {
if len(s3) != (len(s1) + len(s2)) {
return false
}
dp := make([][]bool, len(s1)+1)
for i := 0; i < len(s1)+1; i++ {
dp[i] = make([]bool, len(s2)+1)
}
dp[0][0] = true
for i := 1; i <= len(s1); i++ {
if s1[i-1] != s3[i-1] {
break
}
dp[i][0] = true
}
for j := 1; j <= len(s2); j++ {
if s2[j-1] != s3[j-1] {
break
}
dp[0][j] = true
}
for i := 1; i <= len(s1); i++ {
for j := 1; j <= len(s2); j++ {
if s1[i-1] == s3[i+j-1] && dp[i-1][j] || s2[j-1] == s3[i+j-1] && dp[i][j-1] {
dp[i][j] = true
}
}
}
return dp[len(s1)][len(s2)]
}
执行结果如下:

动态规划图解如下:

2021-06-19:交错字符串。 有三个字符串s1,s2,s3。判断s3是否由s1和s2交错组成的。比如s1=“abc“,s2=“123“,s3=“12ab3c“,应该返回true,因为s3去掉12的更多相关文章
- 字符串之————三向字符串快速排序(Quick3string)
上一篇介绍了字符串的两种经典排序方法(LSD MSD): https://www.cnblogs.com/Unicron/p/11531111.html 下面我们来介绍一种通用的字符串排序方法——三向 ...
- [c/c++] programming之路(22)、字符串(三)——字符串封装
项目结构 头文件.h #include<stdio.h> #include<stdlib.h> #include<string.h> //字符串封装,需要库函数 / ...
- 2021.06.19【NOIP提高B组】模拟 总结
T1 题意:有 \(n\) 个点,有 \(m\) 条边,每次加入一条到图中 问每个点的度数大于零且都是偶数的子图的个数 考试直接判断两点是否出现,出现则更新 其实只要改成并查集判断即可 原理:其实就是 ...
- [Python学习] 模块三.基本字符串
于Python最重要的数据类型包含字符串.名单.元组和字典.本文重点介绍Python基础知识. 一.字符串基础 字符串指一有序的字符序列集合,用单引號.双引號.三重(单 ...
- 19.python基础试题(三)
转载: 老男孩 Python 基础知识练习(三):https://www.cnblogs.com/nulige/p/6128674.html 1.列举布尔值为 False 的值空,None,0, Fa ...
- python数据类型和字符串(三)
一.变量 变量声明变量 #!/usr/bin/env python age= gender1='male' gender2='female' 变量作用:保存状态(程序的运行本质是一系列状态的变化,变量 ...
- ytu 1064: 输入三个字符串,按由小到大的顺序输出(水题,字符串处理)
1064: 输入三个字符串,按由小到大的顺序输出 Time Limit: 1 Sec Memory Limit: 128 MBSubmit: 471 Solved: 188[Submit][Sta ...
- iOS开发Swift篇—(三)字符串和数据类型
iOS开发Swift篇—(三)字符串和数据类型 一.字符串 字符串是String类型的数据,用双引号""包住文字内容 let website = "http://www ...
- 小猪猪逆袭成博士之C++基础篇(三)字符串
小猪猪逆袭成博士之C++基础篇(三)字符串 String 写在题外的话: 非常感谢在我发了第一篇随笔以后有很多人看还评论了,这大概就是一种笔记性质的,也不一定全对,如果不对的地方请指出来让我加以改正. ...
- Java读书笔记三(字符串)
1.介绍 本篇博客将对JAVA中的字符串类的基本知识进行介绍.主要字符串类的一些经常用法等内容. 2.字符串对象的创建 1.有两种形式.可是在开发中常常习惯于String 变量名的形式来进行操作. & ...
随机推荐
- win10_pyhive链接hive失败,提示:Could not start SASL
win10_pyhive链接hive失败,提示:Could not start SASL https://blog.csdn.net/weixin_45684985/article/details/1 ...
- linux 常用的查找命令
linux 常用的查找命令 查找文件内容 grep grep -nr "str" path -nr: n是line number行号,r是recursive,可以理解为遍历文件文件 ...
- graphviz 简单入门
上一位负责画图的选手 CS Academy 由于不明原因暂时不能继续工作,所以本俱乐部招收了新选手 graphviz. 在 Linux 上,你可以这么下载: sudo apt install grap ...
- 详解uniapp和vue在路由方面的不同和联系
Uniapp 和 Vue 在路由方面有相似之处,因为 Uniapp 是基于 Vue 的.Uniapp 的路由系统是通过 Vue Router 实现的,因此两者有许多相同的概念和 API. 相同点: 都 ...
- 天翼网关如何启用FTP服务器?
首先将U盘连接光猫(天翼网关),然后在浏览器或者FTP软件连接.FTP地址例如:ftp://192.168.1.1 用户名和密码一般为你的路由器管理页面也就是192.168.1.1页面的登录名和密码.
- Thanos工作原理及组件简介
Thanos 简介 Thanos 是一个「开源的,高可用的 Prometheus 系统,具有长期存储能力」.很多知名公司都在使用 Thanos,也是 CNCF 孵化项目的一部分. Thanos 的一个 ...
- 网络计划技术——关键路线法(Python)
关键路径法是基于进度网络模型的方法,用网络图表示各项活动之间的相互关系,获得在一定工期.成本.资源约束条件下的最优进度安排.关键路径法源于美国杜邦公司对于项目管理控制成本.减少工期的研究.1959年, ...
- 投资组合计算分析——R语言
"投资组合"是指金融资产(如股票.债券和现金)的任何组合.投资组合有很多类型,包括市场投资组合和零投资投资组合.可以使用以下任何一种投资方法和原则来管理投资组合的资产分配:股息加权 ...
- tidyr包几个函数的用法
在R语言中,tidyr主要提供了一个类似Excel中数据透视表 (pivottable)的功能; gather和spread函数将数据在长格式和宽格式之间相互转化,应用在比如稀疏矩阵和稠密矩阵之间的转 ...
- [Linux]常用命令之【mkdir/touch/cp/rm/ls/mv】
cp 将来源文件夹packageA下的所有目录及文件复制到新文件夹packageB下,形成: /packageB/... # cp -r /home/packageA/* /home/cp/packa ...