边工作边刷题:70天一遍leetcode: day 17
Scramble String
这题其实用递归可以不TLE的,主要是有些预判可以剪枝,3d dp的方法就有点繁琐了。
- 剪枝1:两个string length不相同,返回False
- 剪枝2:两个string相同,直接返回True
- 剪枝3:两个string排序,不相同返回False
class Solution(object):
def isScramble(self, s1, s2):
"""
:type s1: str
:type s2: str
:rtype: bool
"""
if s1==s2: return True
if len(s1)!=len(s2): return False
l1 = list(s1)
l2 = list(s2)
l1.sort();l2.sort()
if l1!=l2: return False
n = len(s1)
for i in xrange(1, n):
if self.isScramble(s1[:i],s2[:i]) and self.isScramble(s1[i:],s2[i:]): return True
if self.isScramble(s1[:i],s2[n-i:]) and self.isScramble(s1[i:],s2[:n-i]): return True
return False