LeetCode 87. 扰乱字符串(记忆化递归 / DP)
生活随笔
收集整理的這篇文章主要介紹了
LeetCode 87. 扰乱字符串(记忆化递归 / DP)
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
文章目錄
- 1. 題目
- 2. 解題
- 2.1 記憶化遞歸
- 2.2 動態規劃
1. 題目
給定一個字符串 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來源:力扣(LeetCode) 鏈接:https://leetcode-cn.com/problems/scramble-string
著作權歸領扣網絡所有。商業轉載請聯系官方授權,非商業轉載請注明出處。
2. 解題
2.1 記憶化遞歸
- 按照長度 1 到 n-1 把 s1 , s2 切開,遞歸判斷
- 注意用哈希表記錄下來一些已經得到的結果,否則超時195 / 285 個通過測試用例
192 ms 25.8 MB C++
2.2 動態規劃
參考大力王的題解
- dp[len][i][j] 表示 長度為 len, s1開始位置為 i,s2 開始位置為 j,是否可以互相表示
56 ms 10.2 MB C++
我的CSDN博客地址 https://michael.blog.csdn.net/
長按或掃碼關注我的公眾號(Michael阿明),一起加油、一起學習進步!
總結
以上是生活随笔為你收集整理的LeetCode 87. 扰乱字符串(记忆化递归 / DP)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 用Docker部署TensorFlow
- 下一篇: [Kaggle] Spam/Ham Em