**重點1:
判斷字串s是否在list中,即實現類似python中in方法
將list轉為set,然後用set的contains方法
list轉set:
setset = new hashset(worddict);實現:
1解題:方法1:遞迴(部分測試用例會超時)public
boolean check(string s, listworddict)
遞迴出口:空字串預設可以分為worddict
遞迴式:f(s[0..n]) = check(s[0,i-1]) && f(s[i..n])注意與動態規劃的區別,動態規劃要求第i項與第i-1項或者i-2項有遞推關係
即 s[0..n]可以分為worddict 當且僅當 s[0,i-1]在worddict中 && s[i,n]可以分為worddict
1方法2:動態規劃1、一般問有幾種方案而不問具體方案是什麼時考慮動態規劃2、很多時候題目中的問題就可以用來建立狀態陣列public
boolean wordbreak(string s, listworddict) else13}
14return
flag;
15 }
例如本題,問s是否可以拆分為worddict ---> dp[n+1] 表示s[0..n]是否可以拆分為worddict
3、建立狀態轉移方程
由於要填寫長度為n+1的狀態表dp中的每乙個值dp[i]
所以找dp[i]與前面項的關係:dp[i]為true當(1)dp[i-1] && check(s[i-1..i]) 或者(2)dp[i-2] && check(s[i-2..i])……或dp[0] && check(s[0..i]),因此用j來做指標,得到
dp[i] = dp[j] && check(s[j,i]) 即s[0,i] = s[0,j]+s[j,i] 觀察到動態規劃轉移方程中前後項是有聯絡的
4、初始狀態
dp[0] =true 空字串預設可以分為worddict
1public
boolean wordbreak(string s, listworddict) 10}
11}12return
dp[s.length()];
13 }
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 ...