1. 题目描述
给定三个字符串 s1, s2, s3, 验证 s3 是否是由 s1 和 s2 交错组成的。
示例 1:
输入: s1 = "aabcc", s2 = "dbbca", s3 = "aadbbcbcac"
输出: true
示例 2:
输入: s1 = "aabcc", s2 = "dbbca", s3 = "aadbbbaccc"
输出: false
2. 思路
2.1 递归
先检查s3的第一个字符,如果等于s1的第一个字符,且不等于s2的第二个字符,将s1和s3向后移动一位,递归。当等于s2的第一个字符且不等于与s1的第一个字符的时候,将s2和s3向后移动一位,递归。如果即等于s1的第一个字符又等于s2的第一个字符,就有可能有两种情况,s2不动,s1向后移动一位或者是s1不动,s2向后移动一位。
不过这种方法最会有一个很长的字符串,让你运行超时
代码
class Solution:
def isInterleave(self, s1: str, s2: str, s3: str) -> bool:
if len(s3) != len(s1) + len(s2):
return False
if s1 == "" and s2 == "" and s3 == "":
return True
if s1 == "":
return s2 == s3
if s2 == "":
return s1 == s3
if s3[0] == s1[0] and s3[0] != s2[0]:
return self.isInterleave(s1[1:],s2,s3[1:])