力扣139.單詞拆分
本題要求判斷給定的字符串 s
是否可以被空格拆分為一個或多個在字典 wordDict
中出現的單詞,且不要求字典中出現的單詞全部都使用,并且字典中的單詞可以重復使用,這是一個典型的動態規劃問題。
動態規劃思路
- 定義狀態:
- 定義一個布爾類型的數組
dp
,其中dp[i]
表示字符串s
的前i
個字符能否被拆分成wordDict
中的單詞。數組長度為s.length + 1
,因為要考慮到空字符串的情況。 - 初始化
dp[0] = true
,表示空字符串可以被拆分,這是動態規劃的初始條件。
- 定義一個布爾類型的數組
- 狀態轉移方程:
- 對于每個位置
i
(從 1 到s.length
),我們需要檢查所有可能的子串s[j:i]
(其中j
從 0 到i - 1
),如果存在一個j
使得dp[j]
為true
且子串s[j:i]
存在于wordDict
中,那么就可以得出dp[i] = true
。因為這意味著前j
個字符可以被拆分,且從j
到i
的子串也在字典中,所以前i
個字符也可以被拆分。
- 對于每個位置
- 最終結果:
- 最終,
dp[s.length]
的值就表示整個字符串s
是否可以被拆分成wordDict
中的單詞。
- 最終,
復雜度分析
- 時間復雜度: O ( n 2 ? m ) O(n^2 * m) O(n2?m),其中 n n n 是字符串
s
的長度, m m m 是字典wordDict
的長度。對于每個位置i
,需要遍歷所有可能的子串,時間復雜度為