边工作边刷题: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
        

转载于:https://www.cnblogs.com/absolute/p/5677873.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值