LeetCode 140 單詞拆分 II

2021-09-18 00:00:04 字數 1386 閱讀 5014

給定乙個非空字串 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"]輸出:

此題和上一道類似,還是用dfs來做。同樣的,我們需要乙個雜湊表》 memo來記錄字串s被拆分的結果。這樣如果後面在遞迴求解某子串s被拆分的結果時,如果這個子串s在之前求出並存入了雜湊表memo,就可以直接取出結果並返回。將字串s傳入dfs函式開始遞迴,先在雜湊表memo中找,如果找到了直接返回已有結果。如果字串為空,那麼返回,然後定義乙個vector陣列out。接下來開始for迴圈,在陣列worddict中遍歷字串,當遇到某乙個字串與s中開頭部分匹配的話,把字串s中除了開頭剩下的部分傳入dfs函式中進行計算,然後把返回的結果賦值給臨時陣列vectortemp,然後我們取陣列temp中的每乙個字串記為ss。然後我們把剛才s開頭匹配的str加上空格" "再加上乙個ss組成乙個新的字串,這個新的字串為拆分結果之一,把它push_back進out裡面。當然如果ss是空的話,我們就不要空格了,那麼將要加入out的新字串其實就是字串s的末尾那個單詞,只有到末尾時才有這種情況。在for迴圈結束後,陣列out中儲存的就是字串s的所有可能拆分的結果。所以我們將字串s與對應的結果組合out記錄在雜湊表memo中,並返回。

class solution 

vectordfs(string s, vector& worddict, unordered_map>& memo);

vectorout;

for(string str : worddict)

}memo[s] = out;

return memo[s];

}};

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...