边工作边刷题: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
        
posted @ 2016-05-04 09:29  absolute100  阅读(77)  评论(0编辑  收藏  举报