演算法 擾亂字串

2021-10-12 17:16:56 字數 1375 閱讀 3454

題目:

給定乙個字串 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"

輸出: true

示例 2:

輸入: 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 交...