140 單詞拆分 II leecode

2021-10-03 01:19:19 字數 1011 閱讀 4948

給定乙個非空字串 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 來解決這個...