難度:中等
這道題的難點在於示例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 ...