leetcode之140單詞拆分 Golang

2022-06-07 07:48:11 字數 1901 閱讀 5909

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

輸出:

首先使用動態規劃的方式求出在字串的什麼地方拆分字串為單詞

從字串的最後乙個字元開始比較

假設mid[i]表示從i開始到字串最後能否拆分為單詞,如果可以,mid[i]true,否則為false

那麼當判斷mid[i-1]的時候,取數jmid[i-1]true的條件就是從i-1i-1+j這之間所有字元組成的單詞能在worddict中找到,並且mid[i+j]的值同時為true,將所有滿足這個條件的j找到,並且將i+j儲存到二維陣列midres

那麼midres[i]的值是乙個陣列,裡面的值就是從i開始,一直到字串的最後,能夠完美拆分為單詞的前提下,從i,到下一次分割(也就是下一次插入空格的地方)

然後使用回溯法找出所有可能分割情況

使用遞迴recursion(i int,tmp0 byte)

當遞迴到字串的最後,遞迴結束

midres[i]中的每乙個值index,在index的地方插入空格

再次呼叫遞迴函式recursion(index int,tmp byte)

func wordbreak(s string, worddict string) string )

for _, word := range worddict {}

} midindexs := make(int, len(s)+1)

midres := make(bool, len(s)+1)

midres[len(s)] = true

for i := len(s) - 1; i >= 0; i--

} }res := string{}

if midres[0]

for _, index := range midindexs[outer]

recursion(index, midstr)

}} recursion(0, byte{})

} return res

}

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