87. 擾亂字符串

87. 擾亂字符串


遞歸:
我們用dg(i,j,length)表示s1[i:i+length]與s2[j:j+length]是否為擾亂字符串。
遞歸的終止條件:
顯然如果s1[i:i+length]與s2[j:j+length]相等,dg(i,j,length)返回True
如果s1[i:i+length]與s2[j:j+length]中的元素不相同,dg(i,j,length)返回False
遞歸過程:
如果s1[i:i+length]與s2[j:j+length]是擾亂字符串,那么就是說,至少存在一個k,k的取值范圍從1到length-1,使得(dg(i+k,j+k,length-k) and dg(i,j,k)) or (dg(i,j+length-k,k) and dg(i+k,j,length-k))為True。
如果我們遍歷所有的k,(dg(i+k,j+k,length-k) and dg(i,j,k)) or (dg(i,j+length-k,k) and dg(i+k,j,length-k))都是False,那么說明s1[i:i+length]與s2[j:j+length]不是擾亂字符串。

代碼:

class Solution:
    def isScramble(self, s1: str, s2: str) -> bool:
        len1 = len(s1)
        if len1!=len(s2):
            return False

        def dg(i,j,length):
            if s1[i:i+length]==s2[j:j+length]:
                return True
            if sorted(s1[i:i+length])!=sorted(s2[j:j+length]):
                return False
            for k in range(1,length):
                if (dg(i+k,j+k,length-k) and dg(i,j,k)) or (dg(i,j+length-k,k) and dg(i+k,j,length-k)):
                    return True
            return False

        return dg(0,0,len1)

關(guān)鍵詞:遞歸

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

友情鏈接更多精彩內(nèi)容