題目:
解答:
說實話,我自己是沒有想出來這道題要用到動態規劃的思想,而且一開始也沒有理解這種方法。
具體方法:
(1)本題的子問題設為從字串 s 的前 i 個元素中能否切分出字典 worddict 裡面的單詞。因為考慮到空字串的問題,我們將用於記錄子問題資訊的vector定義為 len+1 大小。我們認為空字元也包含在了字典中,所以空字串對應的iswordbreak[0] = true。
(2)為了方便查詢某一段字串是否在字典中,先將字典中的元素儲存到乙個set型別中。
(3)用乙個雙迴圈進行判斷。每次判斷的是 i 前面的元素。每次判斷第 j 個元素到第 i -1個元素是否在字典中。一開始iswordbreak[0]=true,第乙個判斷語句不起作用,所以是從字串的第乙個元素開始擷取字串判斷,一直到找到從字串第乙個元素開始的一段字串是屬於字典中的為止,此時將這個位置 i 的資訊記為 true 。
之後的迴圈,通過程式中第乙個判斷語句實現每次都從已經找到的字串的下乙個位置開始擷取(因為這個題目中,字串 s 不允許有剩餘,所以要這樣做)。最後一次判斷的是從某一位置一直到末尾的最後一段字串是否在字典中。
如果最後這一段也在字典中,那麼就說明可以實現,否則不可以。
(4)給乙個特例,希望有助於理解:
如果字串從第一元素開始,一直到字串末尾都不可以擷取屬於字典中的單次,那麼程式外層迴圈將一直執行到 i = len,iswordbreak[len]=false.那麼就直接返回 false。
這段程式的思想:(理解的關鍵)
從第一元素開始尋找屬於字典中的單詞,之後在從這個單詞的後乙個位置繼續尋找,如果一直到末尾都是屬於字典的,那麼就返回true,否則返回false。
classsolution
for(int i = 0;i < len + 1; ++i)
//從位置j開始,擷取i-j長度的字串,如果沒有找到,那麼將返回最後乙個元素的後乙個位置的迭代器
if(dict.find(s.substr(j,i-j)) !=dict.end())}}
return
iswordbreak[len];}};
拆分字串
拆分乙個字串,獲取每一組的key與value。如字串 qq adf f qewr98 eer d9adf t ad34 f qewrqr u adf43 gggg 2344 按照物件導向理念來解決,建立乙個物件 這個是對物件物件,有key和value兩個特性。我們需要把拆分好的資料臨時儲存起來,現在...
拆分字串
本函式可以將 目標字串 以 指定字串 進行拆分,並通過表結構返回結果。如下 create or replace type str split is table of varchar2 4000 create or replace function splitstr p string in varch...
拆分字串
拆分乙個字串,獲取每一組的key與value。如字串 qq adf f qewr98 eer d9adf t ad34 f qewrqr u adf43 gggg 2344 按照物件導向理念來解決,建立乙個物件 這個是對物件物件,有key和value兩個特性。我們需要把拆分好的資料臨時儲存起來,現在...