LeetCode 139 單詞拆分(動態規劃)

2021-10-04 13:27:48 字數 1622 閱讀 6384

難度:中等

這道題的難點在於示例3,字串包含字典中的所有單詞,但是就是無法由字典中的單詞組成,要麼就是多個字元,要麼就是少個字元,所以在使用動態規劃方法的時候要考慮這種情況的發生。

- 動態規劃

我們先考慮這樣乙個子問題:前i個子串是否能夠被字典中的單詞組成,如果可以的話,我們就在這個子串的位置做乙個標記,也就是將i+1記錄下來,然後我們在判斷第i+1到第j位的子串時候能夠被匹配,如果到最後一位的子串能夠被匹配,那麼我們就可以判斷該字串是可以被匹配的。以示例3為例:

我們定義乙個陣列label來存放能夠匹配的位置資訊,長度與s字串的長度相等。

只要出現匹配的情況(一次或者多次),我們都要下標 i+1存入label陣列中。

第七步:當移動到最後一位時,我們的判斷步驟為:

**如下:

// 判斷字元片段是否在worddict裡面

bool match

(char

*s,int left,

int right,

char

** worddict,

int worddictsize)}}

return0;

}bool wordbreak

(char

* s,

char

** worddict,

int worddictsize)}}

res = label[index]

== lens;

free

(label)

;// 釋放記憶體

return res;

}

執行結果為:

**如下:

class

solution

:def

wordbreak

(self, s, worddict)

:"""

:type s: str

:type worddict: list[str]

:rtype: bool

"""ifnot s:

return

true

breakp =[0

]for i in

range

(len

(s)+1)

:for j in breakp:

if s[j:i]

in worddict:

break

return breakp[-1

]==len(s)

執行結果為:

leetcode 139 單詞拆分

題目 給定乙個非空字串 s 和乙個包含非空單詞列表的字典 worddict,確定 s 是否可以被空格分割為乙個或多個在字典裡出現的單詞。你可以假設字典中無重複的單詞。例如,給出 s leetcode dict leet code 返回 true 因為 leetcode 可以被切分成 leet cod...

leetcode139 單詞拆分

給定乙個非空字串 s 和乙個包含非空單詞列表的字典 worddict,判定 s 是否可以被空格拆分為乙個或多個在字典中出現的單詞。說明 拆分時可以重複使用字典中的單詞。你可以假設字典中沒有重複的單詞。示例 1 輸入 s leetcode worddict leet code 輸出 true 解釋 返...

leetcode139 單詞拆分

給定乙個非空字串 s 和乙個包含非空單詞列表的字典 worddict,判定 s 是否可以被空格拆分為乙個或多個在字典 現的單詞。動態規劃,dp i 表示前i個字元能否被拆分 class solution def wordbreak self,s str,worddict list str bool ...