140 單詞拆分 II

2021-10-20 07:32:08 字數 1838 閱讀 8832

題目描述:

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

說明:

示例 1:

輸入:

s = "catsanddog"

worddict = ["cat", "cats", "and", "sand", "dog"]

輸出:[

"cats and dog",

"cat sand dog"

]

示例 2:

輸入:

輸出:[

]解釋: 注意你可以重複使用字典中的單詞。

示例 3:

輸入:

s = "catsandog"

worddict = ["cats", "dog", "sand", "and", "cat"]

輸出:

題解:

法一:回溯 + 記憶化搜尋。

參考 單詞拆分 方法一,在這題基礎上儲存結果,回溯即可。

時間複雜度:o(n

∗2n)

o(n * 2^n)

o(n∗2n

) 額外空間複雜度:o(n

)o(n)

o(n)

class

solution

ret.

emplace_back

(move

(t))

;return

true;}

if(!f[st]

)return f[st]

; string t;

bool flag =

false

;for

(int i = st; i < s.

size()

;++i )

return f[st]

= flag;

} vector

wordbreak

(string s, vector

& worddict)};

/*記憶體:12.3mb,擊敗:59.44%

*/

法二:

回溯 + 動態規劃。

參考 單詞拆分 方法二,動態規劃完成後,根據f的狀態進行回溯搜尋所有結果。

時間複雜度:o(n

∗2n)

o(n * 2^n)

o(n∗2n

) 額外空間複雜度:o(n

)o(n)

o(n)

class

solution

ret.

emplace_back

(move

(t))

;return;}

string t;

for(

int i = st +

1; i <= s.

size()

;++i )

} vector

wordbreak

(string s, vector

& worddict)}if

(!f[s.

size()

])return ret;

dfs(

0, s )

;return ret;}}

;/*記憶體:8.6mb,擊敗:96.34%

*/

140 單詞拆分 II

給定乙個非空字串 s 和乙個包含非空單詞列表的字典 worddict,在字串中增加空格來構建乙個句子,使得句子中所有的單詞都在詞典中。返回所有這些可能的句子。說明 分隔時可以重複使用字典中的單詞。你可以假設字典中沒有重複的單詞。示例 1 輸入 s catsanddog worddict cat ca...

140 單詞拆分 II

給定乙個非空字串 s 和乙個包含非空單詞列表的字典 worddict,在字串中增加空格來構建乙個句子,使得句子中所有的單詞都在詞典中。返回所有這些可能的句子。想到了單詞拆分,可以用動態規劃先判斷字串s中每個位置i是否可以拆分為單詞,dp i 表示 0,i 可以拆分,然後就可以根據dp i 來解決這個...

140 單詞拆分 II

140.單詞拆分 ii 給定乙個非空字串 s 和乙個包含非空單詞列表的字典 worddict,在字串中增加空格來構建乙個句子,使得句子中所有的單詞都在詞典中。返回所有這些可能的句子。說明 分隔時可以重複使用字典中的單詞。你可以假設字典中沒有重複的單詞。示例 1 輸入 s catsanddog wor...