给出两个长度相等的字符串 s1 和 s2,判断 s2 是否是 s1 的扰乱字符串。
示例 1:
输入: s1 = “great”, s2 = “rgeat”
输出: true
示例 2:
输入: s1 = “abcde”, s2 = “caebd”
输出: false
递归
- 如果 T和 S 长度不一样,必定不能变来
- 如果长度一样,顶层字符串 S 能够划分为 S1和 S2,同样字符串 T 也能够划分为 T1和 T2
- 情况一:没有交换: S1->T1, S2->T2
- 情况二:交换过: S1->T2, S2->T1
由于这是一种树型的结构,所以我们考虑使用递归进行求解:
- 递归弹出条件 两者相等,返回True; 字符上肯定不能构成返回False;
- 开始对每一个可能的分割点进行遍历递归, 只要有一种情况为真都返回True;否则返回False
from typing import List
class Solution:
def isScramble(self, s1: str, s2: str) -> bool:
if s1 == s2:
return True
if sorted(s1) != sorted(s2):
return False
n = len(s1)
for i in range(1