題目:
給定乙個字串 s1,我們可以把它遞迴地分割成兩個非空子字串,從而將其表示為二叉樹。
下圖是字串 s1 ="great"
的一種可能的表示形式。
great在擾亂這個字串的過程中,我們可以挑選任何乙個非葉節點,然後交換它的兩個子節點。/ \
gr eat
/ \ / \
g r e at
/ \a t
例如,如果我們挑選非葉節點"gr"
,交換它的兩個子節點,將會產生擾亂字串"rgeat"
。
rgeat我們將/ \
rg eat
/ \ / \
r g e at
/ \a t
"rgeat」
稱作"great"
的乙個擾亂字串。
同樣地,如果我們繼續將其節點"eat"
和"at"
進行交換,將會產生另乙個新的擾亂字串"rgtae"
。
rgtae我們將/ \
rg tae
/ \ / \
r g ta e
/ \t a
"rgtae」
稱作"great"
的乙個擾亂字串。
給出兩個長度相等的字串 s1 和 s2,判斷 s2 是否是 s1 的擾亂字串。
示例 1:
輸入: s1 = "great", s2 = "rgeat"示例 2:輸出: true
輸入: s1 = "abcde", s2 = "caebd"輸出: false
class solution
boolean dp = new boolean[n][n][n + 1];
// 初始化單個字元的情況
for (int i = 0; i < n; i++)
}// 列舉區間長度 2~n
for (int len = 2; len <= n; len++)
// 第二種情況:s1 -> t2, s2 -> t1
// s1 起點 i,t2 起點 j + 前面那段長度 len-k ,s2 起點 i + 前面長度k
if (dp[i][j + len - k][k] && dp[i + k][j][len - k]) }}
}}
return dp[0][0][n];
}}
87 擾亂字串
class solution def isscramble self,s1 str,s2 str bool dp 難點分析 1.首先理解三層dp分別代表 長度,s1起點,s2起點 2.初始化dp長度為1的dp子串 3.狀態轉移方程,長度為l的dp l 可以從dp l k 與 dp k 轉移而來 4....
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 交...