對於可用動態規劃求解的問題,一般有兩個特徵:1)最優子結構;2)重疊子問題
思路:定義labels[i]表示前i個字符是否可以拆分成字典中的詞,很顯然有
labels[i]=1 if labels[j] && s[j+1,i] in dict else 0 其中(0<j<i)
bool fun(String s,unordered_set<String> &dict){
int len=s.length();
vector<bool> labels(len+1,flase);
labels[0]=true;
for(int i=1;i<len;+=i)
for(int j=0;labels[j] && j<i;++j)
if (dict.find(s.substr(j,i-j))!=dict.end())
labels[i]=true;
return labels[len];
}