题目:
Given a string s and a dictionary of words dict, determine if s can be segmented into a space-separated sequence of one or more dictionary words.
For example, given
s ="leetcode",
dict =["leet", "code"].
Return true because"leetcode"can be segmented as"leet code".
思路:动态规划求解:设置一个数组vec;用true记录子串在dict中出现的首位位置。
(1)首先记录vec第一个元素出现的位置true;
(2)在dict中寻找子串是否出现,出现则最后一位记为true;
(3)在dict中寻找剩下的子串,继续做标记,知道最后标记为true。
代码:
class Solution {
public:
bool wordBreak(string s, unordered_set<string> &dict) {
int len = s.length();
vector<bool> vec(len+1,false);
vec[0]=true;
for(int pos=0;pos<len;++pos){
for(int i=pos;vec[pos] && i<len;++i){
if (dict.find(s.substr(pos,i-pos+1))!=dict.end())
dp[i+1]=true;
}
}
return vec[len];
}
};