交错字符串Python解法
生活随笔
收集整理的這篇文章主要介紹了
交错字符串Python解法
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
給定三個字符串 s1、s2、s3,請你幫忙驗證 s3 是否是由 s1 和 s2 交錯 組成的。
兩個字符串 s 和 t 交錯 的定義與過程如下,其中每個字符串都會被分割成若干 非空 子字符串:
s = s1 + s2 + ... + sn
t = t1 + t2 + ... + tm
|n - m| <= 1
交錯 是 s1 + t1 + s2 + t2 + s3 + t3 + ... 或者 t1 + s1 + t2 + s2 + t3 + s3 + ...
注意:a + b 意味著字符串 a 和 b 連接。
來源:力扣(LeetCode)
鏈接:https://leetcode-cn.com/problems/interleaving-string
?
例:
輸入:s1 = "aabcc", s2 = "dbbca", s3 = "aadbbcbcac" 輸出:true解析:
動態規劃,dp數組,涉及兩個字符串先看看能不能用dp數組。最后返回dp[-1][-1]即可。
class Solution(object):def isInterleave(self, s1, s2, s3):""":type s1: str:type s2: str:type s3: str:rtype: bool"""len1 = len(s1) # 字符串1的長度len2 = len(s2) # 字符串2的長度len3 = len(s3) # 字符串3的長度if (len1 + len2 != len3): # 如果1和2的長度與3不相等,必定為Falsereturn Falsedp = [[False] * (len2 + 1) for i in range(len1 + 1)] # 創建全為False的dp數組dp[0][0] = True # 全為空時返回Truefor i in range(1, len1 + 1): # 初始化第一列dp[i][0] = (dp[i-1][0] and s1[i-1] == s3[i-1]) # 值相等并且前面的字符串能夠匹配for i in range(1, len2 + 1): # 初始化第一行dp[0][i] = (dp[0][i-1] and s2[i-1] == s3[i-1]) # 值相等并且前面的字符串能夠匹配for i in range(1, len1 + 1): # 遍歷dp數組行for j in range(1, len2 + 1): # 遍歷dp數組列dp[i][j] = (dp[i][j - 1] and s2[j - 1] == s3[i + j - 1]) or (dp[i -1][j] and s1[i - 1] == s3[i + j -1]) # 要么加字符串1的值,要么加字符串2的值,前面的字符串為True并且當前值相同return dp[-1][-1] # 返回dp數組右下角的值即可總結
以上是生活随笔為你收集整理的交错字符串Python解法的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 东南亚出游降温:机票降幅达40%
- 下一篇: 最大字段和(动态规划,C语言)