leetcode140 單詞拆分 II

2021-09-13 10:08:24 字數 1698 閱讀 2768

給定乙個非空字串 s 和乙個包含非空單詞列表的字典 worddict,在字串中增加空格來構建乙個句子,使得句子中所有的單詞都在詞典中。返回所有這些可能的句子。

先判斷能否拆分,再dfs得出結果:

class

solution

:def

wordbreak

(self, s:

str, worddict: list[

str])-

> list[

str]

:# 先判斷能否拆分,再回溯生成所有結果

dp =

[false]*

(1+len

(s))

dp[0]

, self.res =

true,[

]for i in

range(1

,len

(s)+1)

:for j in

range

(i):

if dp[j]

and s[j:i]

in worddict:

dp[i]

=true

break

if dp[-1

]:self.dfs(s, worddict,'')

return self.res

defdfs(self, s, words, tmp):if

not s::-

1])for word in words:

if s.startswith(word)

: self.dfs(s[

len(word):]

, words, tmp+word+

' ')

用dp的結果簡化運算:
class

solution

:def

wordbreak

(self, s:

str, worddict)

:# 先判斷能否拆分,再回溯生成所有結果

self.dp =

[false]*

(1+len

(s))

self.dp[0]

, self.res =

true,[

]for i in

range(1

,len

(s)+1)

:for j in

range

(i):

if self.dp[j]

and s[j:i]

in worddict:

self.dp[i]

=true

break

if self.dp[-1

]:self.dfs(s, worddict,'',

0)return self.res

defdfs(self, s, words, tmp, i)

:if i ==

len(s)::

-1])

for j in

range(1

,len

(s[i:])

+1):

if self.dp[i+j]

and s[i:i+j]

in words:

self.dfs(s, words, tmp+s[i:i+j]

+' '

, i+j)

leetcode 140單詞拆分

原想法 通過遍歷找出每個位點可能出現的單詞的列表,然後通過dfs遍歷找出所有的組合,有點類似於之前刷pat時用的dijstra dfs,如下 class solution else if cursor length 先通過迴圈搜尋出所有開始點可能出現的單詞 for int i 0 i全是a的那個點執...

LeetCode140 單詞拆分II

leetcode140.單詞拆分ii 動態規劃 dfs 回溯。動態規劃 根據139單詞拆分使用動態規劃dp j i 表示從s j.i 1 是可拆分的,可以理解為長度len的字串有len 1可以分割的位置。dfs 遞迴的遍歷當前字串,vectorpath用來記錄能夠拆分的一條路徑。回溯 同一分支的多種...

LeetCode 140 單詞拆分 II

問題描述 給定乙個非空字串 s 和乙個包含非空單詞列表的字典 worddict,在字串中增加空格來構建乙個句子,使得句子中所有的單詞都在詞典中。返回所有這些可能的句子。說明 示例 1 輸入 s catsanddog worddict cat cats and sand dog 輸出 cats and...