leetcode : Interleaving String
runtime 0 ms, beats 100% of cpp submissions
O(mn) solution with explanation
tags: recursion, dp
🔗 link
📖 description
給定三個字串 s1, s2, s3 ,判斷 s3 可不可以被 s1 與 s2 按照順序組合。
ex. s1 = "aabcc", s2 = "dbbca", s3 = "aadbbcbcac" s1 s2 s1 s2 s1 aa dbbc bc a c 其中一種解法
🧠 solution
本題使用暴力法的時間複雜度為 O(2^(m+n)) ,顯然是不可行的,但我們可以從一些範例中看到有許多部分需要重複計算。
ex. s1 = "aabcc", s2 = "dbbca", s3 = "aadbbcbcac" s1 s2 aa d 比如在此狀態下,我們可以從 s1 挑選 b ,也可以從 s2 挑選 b ,當重複的 query 發生時,我們必須重複確認許多已經看過的狀態
於是將以看過的狀態儲存下來,避免重複計算,就可以顯著的減少時間複雜度。
⏳ time complexity
m 表示 s1 的長度,n 表示 s2 的長度
所有狀態的數量為 mn 種,計算複雜度為 O(1)
總時間複雜度 O(mn)
📝 code
1 | class Solution { |