題目描述:
給定乙個非空字串 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...