標籤(空格分隔): 課堂作業
姓名:李**
學號:16340114
題目:word break(
給定乙個無分隔符的字串和乙個字典,問是否能將字串分解成字典中含有的詞。
給定位置i,定義該下標"可分解"的含義為:從0到該下標的子字串(不包括i)是可以被分解的。
要判斷乙個位置i是否可分解,就要判斷上乙個可分解的位置j到當前位置i(包含j不包含i)所分割形成的詞是否在字典中,如果存在這樣的j,那麼位置i就是可分解的,如果不存在,那麼位置i就是不可分解。最終答案就是下標為字串長度l的位置是否可分解。
用符號的方式有點難說清楚,舉個例子就好了。字串為"helloworld",位置0是可分解的,因為下標為0的位置之前是長度為0的串,自然可以分解,位置5是可分解的,下標為5的為w,w前的可分解位置是0,從0到5(包含0不包含5)形成的詞為hello。這樣就應該清楚以可分解位置為下標的詞應該歸到下一詞的開頭,而不是上乙個詞的結尾。
由此推出狀態遷移方程為:
f or
ifro
m1to
leng
th
:for i from 1 to length:
forifr
om1t
olen
gth:
f or
jfro
mi−1
to0:
for j from i-1 to 0:
forjfr
omi−
1to0:if
(val
id[j
]ist
ruea
ndsu
bstr
ing(
jtoi
)isi
ndic
tion
ary)
:if (valid[j] is true and substring(j to i) is in dictionary):
if(val
id[j
]ist
ruea
ndsu
bstr
ing(
jtoi
)isi
ndic
tion
ary):va
lid[
i]=t
ru
evalid[i] = true
valid[
i]=t
rue下標為0的位置是可分解的,因為0位置前的空子字串是可分解的,所以把valid[0]設為true,其他位置的值設為false,然後根據狀態轉移方程寫就好了。
這道題在課堂上講過,我覺得動手來實現一遍可以加深印象和對動態規劃的理解。我現在對動態規劃的認識似乎比上一周領略的要更好一點,像word break這一型別的動態規劃問題,先考慮乙個任意位置i,用某種規則從位置i往前找j,根據前面的j的狀態確定當前位置i的狀態。課本習題的開餐廳那題也是這個思想。下一周想挑戰一下這道題的公升級版,希望能對動態規劃有更深的認識。
#define isvalid(word) (find(worddict.begin(), worddict.end(), word) == worddict.end() ? false : true)
class solution }}
}return validendat[length];
}};
第十周作業
1.感觸太多!讓我醍醐灌頂 2.很有教育意義 3.看您的文章真的是享受。觀察問題和思考原因,最後給出解決辦法!每每一針見血。1.公司員工要想長久要給員工提供提公升空間,讓員工替老闆幹,轉變為員工為自己幹。2.學習能力尤為重要,我們要不斷學習提公升自身能力 3.給出清晰 明確的目標,知道自己該幹嘛,知...
第十周作業
本次作業所屬課程 c語言程式設計 本次作業要求 我在這個課程的目標是 學會熟練使用結構型別 本次學習在哪些具體方面幫組我實現目標 自己定義結構還是會方便很多 參考文獻 c primer plus第六版 一 劉未鵬的部落格 怎樣花兩年時間面試乙個人 a 實踐是檢驗真理的唯一標準!能說會道的前提是你要有...
第十周作業
十一周上機作業 cola公司的雇員分為以下若干類 知識點 多型 1 colaemployee 這是所有員工總的父類,屬性 員工的姓名,員工的生日月份。方法 getsalary int month 根據引數月份來確定工資,如果該月員工過生日,則公司會額外獎勵100 元。2 salariedemploy...