博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
leetcode python interleaving-string
阅读量:2428 次
发布时间:2019-05-10

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

准备下班

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.

题意

即s3能否被s1和s2交错构成

思路

这道题又是求true or false, 首先想到dp, 只要把dp[[i][j]表示s1[0…i-1]和s2[0…j-1]是否可以拼接为s3[0…i+j-1], 只要把dp[i][j]的表达式想出来,后面也就迎刃而解。但是,前面的初始化部分经常容易遗忘(一般也没dp[i][0]和dp[0][j]这一部分, 当心

python实现

class Solution:    def isInterleave(self, s1, s2, s3):        len1, len2, len3 = len(s1), len(s2), len(s3)        if len3 != len1 + len2:            return False        dp = [[False] * (len2 + 1) for _ in range(len1 + 1)]        dp[0][0] = True        for i in range(1, len1 + 1):            dp[i][0] = s1[:i] == s3[:i]        for j in range(1, len2 + 1):            dp[0][j] = s2[:j] == s3[:j]        for i in range(1, len1 + 1):            for j in range(1, len2 + 1):                dp[i][j] = (dp[i - 1][j] and s3[i + j - 1] == s1[i - 1]) or (                            dp[i][j - 1] and s3[i + j - 1] == s2[j - 1])        return dp[len1][len2]if __name__ == '__main__':    s1 = "aabcc"    s2 = "dbbca"    s3 = "aadbbcbcac"    # s3 = "aadbbbaccc"    so = Solution()    print(so.isInterleave(s1, s2, s3))

转载地址:http://hejmb.baihongyu.com/

你可能感兴趣的文章
谷歌排名第一的编程语言,死磕它这两点,小白也能学的会!不信你看!
查看>>
程序员掉头发的原因找到了 | 每日趣闻
查看>>
腾讯:我就是那只吃了假辣椒酱的憨憨。老干妈:企鹅你可长点心吧!
查看>>
倒计时1天 | 张钹院士领衔,AI开发者大会20大论坛全攻略!
查看>>
运维工程师的日常?? | 每日趣闻
查看>>
31 道 Java 核心面试题,统统打包给你!
查看>>
太拼了:谷歌第一编程语言小白也能学会!
查看>>
三分钟黑了阿里?马云下死命令留他?吴翰清辟谣:我没黑过阿里
查看>>
如果重新一次高考,你还会选择软件专业当程序员吗? | 每日趣闻
查看>>
如何设计一个安全可靠的 API 接口?
查看>>
一年一度程序员“补课”季来袭,618 背后技术大公开!
查看>>
我和美国 AI 博士聊了聊:2020 年,这件事比存钱更重要!
查看>>
陈芳,高考之后我要学计算机专业,将来做 IT 发财了,我就娶你!
查看>>
“编程能力差的程序员,90%输在这事上!”谷歌AI专家:都是瞎努力!
查看>>
张一鸣做电商:再造一个“抖音”
查看>>
“你写的 Bug 让我来改好吗” | 每日趣闻
查看>>
大厂技术文档:Redis+Nginx+Spring全家桶+Dubbo精选
查看>>
笑死,别再黑程序员了好吗? | 每日趣闻
查看>>
Python 爬取 13966 条运维招聘信息,这些岗位最吃香
查看>>
28 岁退休程序员自述:不是富二代,行政专业出身,非典型程序员
查看>>