leetcode 139 單詞拆分(dp)

2021-10-04 15:21:17 字數 1290 閱讀 9358

如果題目沒有要求給出具體的路徑,能用dfs解決的題目一般都可以用dp解決。

只是這個題目的子問題有點奇怪,因此沒有考慮好。

子問題:以s[i]結尾的字串是否滿足題意

狀態dp[i]對應每個子問題

狀態轉移dp[i] = dp[x] and s[x:i] in dic也就是說,前一段滿足狀態,且後一段整體在。其中x需要被遍歷,因為我們將x看為了乙個整體。

初狀態dp[0]=true

class

solution

(object):

defwordbreak

(self, s, worddict)

:"""

:type s: str

:type worddict: list[str]

:rtype: bool

"""dp =

[false

for i in

range

(len

(s)+1)

] dp[0]

=true

worddict =

set(worddict)

for i in

range(0

,len

(s))

:for j in

range

(i+1

,len

(s)+1)

:if dp[i]

and(s[i:j]

in worddict)

: dp[j]

=true

if dp[

len(s)]:

return

true

return

false

**反思:

這個型別的dp問題還是做的不夠多,對於子問題的設計沒有感覺。

這裡是將前i個字串作為乙個整體,後一段作為乙個整體分析。還是很巧妙的。

整體的時間複雜度:o(n

2)o(n^2)

o(n2

)

leetcode 139 單詞拆分

題目 給定乙個非空字串 s 和乙個包含非空單詞列表的字典 worddict,確定 s 是否可以被空格分割為乙個或多個在字典裡出現的單詞。你可以假設字典中無重複的單詞。例如,給出 s leetcode dict leet code 返回 true 因為 leetcode 可以被切分成 leet cod...

leetcode139 單詞拆分

給定乙個非空字串 s 和乙個包含非空單詞列表的字典 worddict,判定 s 是否可以被空格拆分為乙個或多個在字典中出現的單詞。說明 拆分時可以重複使用字典中的單詞。你可以假設字典中沒有重複的單詞。示例 1 輸入 s leetcode worddict leet code 輸出 true 解釋 返...

leetcode139 單詞拆分

給定乙個非空字串 s 和乙個包含非空單詞列表的字典 worddict,判定 s 是否可以被空格拆分為乙個或多個在字典 現的單詞。動態規劃,dp i 表示前i個字元能否被拆分 class solution def wordbreak self,s str,worddict list str bool ...