[LeetCode]87.Scramble String

下面是Scramble Stringr的代码

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
        //Note that len(s1)-1 not len(s1)
        for i in range(len(s1)-1):
            for j in range(len(s2)-1):
                a,b,c,d=s1[:i+1],s1[i+1:],s2[:j+1],s2[j+1:]
                if(sorted(a)==sorted(c)):
                    if(self.isScramble(a,c) and self.isScramble(b,d)):
                        return True
                if(sorted(a)==sorted(d)):
                    if(self.isScramble(a,d)and self.isScramble(b,c)):
                        return True
        return False

题解:例如,”great”,”rgeat”,”rgtea”,”rgtae”都是可以匹配,那么我们如何判断两个字符串S和P是否可以匹配呢?假设S和P的长度为N,那么S和P分别可以有N-1种划分方式。比如“great”这个单词,我们可以将其划分为“g-reat”,”gr-eat”,”gre-eat”,”grea-t”,共有4种划分方式,同理要匹配的对应串也是如此。一对字符串可以匹配,那么他们两两对应的组合也应该是可匹配的。
我们假设s划分为a、b,p划分为c、d。那么要么可能是ac,bd or ad,bc。当然匹配的前提是两个字符串出现的字符是一样的,我们只需要对其进行排序再判断是否相等就行了。
理解了上面,就知道这是一个递规的过程。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值