給定乙個非空字串 s 和乙個包含非空單詞列表的字典 worddict,在字串中增加空格來構建乙個句子,使得句子中所有的單詞都在詞典中。返回所有這些可能的句子。
說明:分隔時可以重複使用字典中的單詞。
你可以假設字典中沒有重複的單詞。
題目鏈結
這道題明顯是個搜尋的題目。
但問題在於如何進行搜尋。每個位置可能變成除自身以外的25個字母。直接蒐會很暴力。
所以我們想了一種利用dp+字典樹的方法來先將單詞進行劃分。
若dp[i]=j,表示字串從下標i開始,長度為j-i的字串存在在題目給定的字典裡面。
如何查詢呢?最好的方法就是將字典裡面的單詞建立乙個字典樹,然後在樹上查詢就好了。
在建立dp陣列之後,需要從末尾開始dfs搜尋結果就好了。
**如下:
//字典樹的模板
class
tire
void
insert
(string s)
node = node-
>next[c -
'a'];}
node-
>isleaf =
true;}
};class
solution
str.
pop_back()
;//最後末尾多餘乙個" "
ans.
push_back
(str)
;return;}
for(
int i : dp[d])}
vector
wordbreak
(string s, vector
& worddict)}}
//得到dp陣列之後,從最後乙個字母開始向前dfs,最終可以搜尋到所有的單詞。
vector ans;
vector tword;
dfs(s,ans,tword,dp,l)
;return ans;}}
;
140 單詞拆分 II
給定乙個非空字串 s 和乙個包含非空單詞列表的字典 worddict,在字串中增加空格來構建乙個句子,使得句子中所有的單詞都在詞典中。返回所有這些可能的句子。說明 分隔時可以重複使用字典中的單詞。你可以假設字典中沒有重複的單詞。示例 1 輸入 s catsanddog worddict cat ca...
140 單詞拆分 II(continue)
給定乙個非空字串 s 和乙個包含非空單詞列表的字典 worddict,在字串中增加空格來構建乙個句子,使得句子中所有的單詞都在詞典中。返回所有這些可能的句子。說明 示例 1 輸入 s catsanddog worddict cat cats and sand dog 輸出 cats and dog ...
140 單詞拆分 II
給定乙個非空字串 s 和乙個包含非空單詞列表的字典 worddict,在字串中增加空格來構建乙個句子,使得句子中所有的單詞都在詞典中。返回所有這些可能的句子。想到了單詞拆分,可以用動態規劃先判斷字串s中每個位置i是否可以拆分為單詞,dp i 表示 0,i 可以拆分,然後就可以根據dp i 來解決這個...