題目描述
給定乙個字串,和乙個詞典dict, 確定s是否可以根據詞典中的詞分成乙個或多個單詞.
舉個例子:
比如, 給定
s = 「leetcode」
dict = [「leet」, 「code」]
返回true, 因為"leetcode"可以被分成"leet"和"code"
方法
動態規劃
首先我們對題目分析, 給出乙個狀態, 假設乙個狀態f(i):
f(i)表示給定字串的的前i個字元能否根據字典中的詞成功分離
接下來我們就可以把這個問題分解為:
給定字串前1個字元( f(1) )是否可以被分離, 前2個字元( f(2) )是否可以被分離, 前3個字元…一直到前n個字元( f(n) )
「leetcode」, 為了判斷這個字串是否可以被分割, 我們首先要從頭開始判斷, 也就是f(1)( 給定字串的前1個字元是否可以分割 ), 因此我們需要乙個輔助變數 f(0) 並將其記為 true
這樣我們就可以給出狀態的遞推
f(i): f(j) && j < i && substr(j, i-j) -----f(i)記為true, 否則記為false
也就是說, 在 j < i 中, 只要能夠找到乙個 f(j) 為 true, 並且 從 j + 1 位置開始到 i - j 之間的字串可以在字典中找到, 這樣 f(i) 就可以記為 true
看例子說明:
「leetcode」
輔助變數f(0)記為 true
前1個字元, 為 「l」—>不可以被分割------f(1)記為false
前2個字元, 為 「le」—>不可以被分割------f(2)記為false
前3個字元, 為 「lee」—>不可以被分割------f(3)記為false
前4個字元, 為 「leet」—>可以被分割------f(4)記為 true
此時f(0) f(1) f(3) f(4)
true false false true
前5個字元, 為 「leetc」—>不可以被分割------此時還不能將f(5)記為false, 因為 f(4) 為 true, 也就是說此時還要判斷的是 "c"能否在詞典中找到, "c"並不在詞典中, f(5)記為 false
前6個字元, 為 「leetco」—>不可以被分割------此時還不能將f(6)記為false, 同理因為 f(4) 為 true, 也就是說此時還要判斷的是 "co"能否在詞典中找到, "co"並不在詞典中, f(6)記為 false
同理一直到前8個字元, 「leetcode」—>不可分割-----接下來判斷"code", 在詞典中可以找到, f(8)為true
返回值:
最後返回f(n)即可
這樣描述可能還是有些抽象, 換一種好理解的方式來說:
「leetcode」, 我們去判斷這個字串能否分割的時候, 肯定是從"l"開始
逐個往後, 這也就是上面輔助變數f(0)的作用, 使得每次迴圈都可以從"l"開始往後判斷, 當發現"leet"在詞典中找到了, 說明這個單詞可以分割出來, 就把t位置也就是f(4)記為true, 方便下一次遞推, 對應到我們的思維當中, 也就是說這個單詞屬於完整的乙個個體, 後面再去判斷剩餘的字串是否可以分割的時候, 從"c"開始逐個判斷即可, 只是上面給出的狀態變數是f(i)表示的是前i個字元是否可以被分割, 所以多判斷了一步.
**如下:
class solution
}} return v[len];
}};
附牛客鏈結leetcode mysql分割字串 mysql分割字串
專案有通過一批id去過濾結果的需求,因為這個id是從其他平台拉下來的excel,為了避免加引號逗號的麻煩,在mysql儲存過程裡面拼接。在此做個記錄。很多地方用得上。1.通過某個字元,分割字串的函式。輸入分別為f string 待分割字串 f delimiter 分割字元 f order 取的字串的...
分割字串
string.split char 返回包含此例項中的子字串 由指定 char 陣列的元素分隔 的 string 陣列。由 net compact framework 支援。string.split char,int32 返回包含此例項中的子字串 由指定 char 陣列的元素分隔 的 string ...
分割字串
最近手裡的活用到分割字串,自己嘗試寫了乙個,在網上找到幾個,留著以後備用。char steps char token char strusbinfo 512 memcpy strusbinfo,1e 2f 3g strlen 1e 2f 3g token strtok strusbinfo,step...