Leetcode 97.交错字符串
1 题目描述(Leetcode题目链接)
给定三个字符串 s1, s2, s3, 验证 s3 是否是由 s1 和 s2 交错组成的。
输入: s1 = "aabcc", s2 = "dbbca", s3 = "aadbbcbcac"
输出: true
输入: s1 = "aabcc", s2 = "dbbca", s3 = "aadbbbaccc"
输出: false
2 题解
动态规划,定义 d p [ i ] [ j ] dp[i][j] dp[i][j]为 s 1 s_1 s1的前 i i i个字符与 s 2 s_2 s2的前 j j j个字符能否交错组成 s 3 s_3 s3的前 i + j i+j i+j个字符。分析比较容易。
class Solution:
def isInterleave(self, s1: str, s2: str, s3: str) -> bool:
m, n = len(s1), len(s2)
if m + n != len(s3):
return False
dp = [([False]*(n+1)) for _ in range(m+1)]
dp[0][0] = True
for i in range(1, n+1):
dp[0][i] = (s2[i-1] == s3[i-1]) and dp[0][i-1]
for i in range(1, m+1):
dp[i][0] = (s1[i-1] == s3[i-1]) and dp[i-1][0]
for i in range(1, m+1):
for j in range(1, n+1):
dp[i][j] = ((s3[i+j-1] == s1[i-1]) and dp[i-1][j]) or ((s3[i+j-1] == s2[j-1]) and dp[i][j-1])
return dp[-1][-1]