LeetCode 87 擾亂字串 C

2021-09-25 19:54:04 字數 1305 閱讀 3732

給定乙個字串 s1,我們可以把它遞迴地分割成兩個非空子字串,從而將其表示為二叉樹。

下圖是字串 s1 = 「great」 的一種可能的表示形式。

在擾亂這個字串的過程中,我們可以挑選任何乙個非葉節點,然後交換它的兩個子節點。

例如,如果我們挑選非葉節點 「gr」 ,交換它的兩個子節點,將會產生擾亂字串 「rgeat」 。

我們將 "rgeat」 稱作 「great」 的乙個擾亂字串。

同樣地,如果我們繼續交換節點 「eat」 和 「at」 的子節點,將會產生另乙個新的擾亂字串 「rgtae」 。

我們將 "rgtae」 稱作 「great」 的乙個擾亂字串。

給出兩個長度相等的字串 s1 和 s2,判斷 s2 是否是 s1 的擾亂字串。

示例 1:

輸入: s1 = 「great」, s2 = 「rgeat」

輸出: true

示例 2:

輸入: s1 = 「abcde」, s2 = 「caebd」

輸出: false

這道題定義了一種爬行字串(擾亂字串),就是說假如把乙個字串當做乙個二叉樹的根,然後它的非空子字串是它的子節點,然後交換某個子字串的兩個子節點,重新爬行回去形成乙個新的字串,這個新字串和原來的字串互為爬行字串。

這道題可以用遞迴recursion或是動態規劃dynamic programming來做,簡單的說,**就是s1和s2是scramble的話,那麼必然存在乙個在s1上的長度l1,將s1分成s11和s12兩段,同樣有s21和s22.那麼要麼s11和s21是scramble的並且s12和s22是scramble的;要麼s11和s22是scramble的並且s12和s21是scramble的。**就拿題目中的例子 rgeat 和 great 來說,rgeat 可分成 rg 和 eat 兩段, great 可分成 gr 和 eat 兩段,rg 和 gr 是scrambled的, eat 和 eat 當然是scrambled。根據這點,我們可以寫出**如下。

class

solution

return

false;}

};

leetcode87 擾亂字串

給定乙個字串 s1,我們可以把它遞迴地分割成兩個非空子字串,從而將其表示為二叉樹。下圖是字串 s1 great 的一種可能的表示形式。great gr eat g r e at a t 在擾亂這個字串的過程中,我們可以挑選任何乙個非葉節點,然後交換它的兩個子節點。例如,如果我們挑選非葉節點 gr 交...

leetcode 87 擾亂字串

給定乙個字串 s1,我們可以把它遞迴地分割成兩個非空子字串,從而將其表示為二叉樹。下圖是字串 s1 great 的一種可能的表示形式。great gr eat g r e at a t 在擾亂這個字串的過程中,我們可以挑選任何乙個非葉節點,然後交換它的兩個子節點。例如,如果我們挑選非葉節點 gr 交...

leetcode 87 擾亂字串

87.擾亂字串 沒有任何思路 直接google別人的題解,大致看懂了吧 簡單的說,就是s1和s2是scramble的話,那麼必然存在乙個在s1上的長度l1,將s1分成s11和s12兩段,同樣有s21和s22.那麼要麼s11和s21是scramble的並且s12和s22是scramble的 要麼s11...