题目描述
给定一个字符串s和一组单词dict,判断s是否可以用空格分割成一个单词序列,使得单词序列中所有的单词都是dict中的单词(序列可以包含一个或多个单词)。
例如:
给定s=“leetcode”;
dict=["leet", "code"].
返回true,因为"leetcode"可以被分割成"leet code".
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".
题目思路
动态规划思路
定义v[i] = true为S字符串上[0,i]的子串是否可以在dict检测到.
那么
v[i] = true if S[0,i]在dictionary里面
= true if v[k] == true 并且 S[k+1,i]在dictionary里面, 0<k<i
= false if no such k exist.
class Solution {
public:
bool wordBreak(string s, unordered_set<string> &dict) {
int len = s.length();
vector<bool> v(len+1, false);
v[0] = true;
for(int i = 1; i <= len; i++){
for(int j = i - 1; j>= 0; j--){
if(v[j] && dict.find(s.substr(j, i-j)) != dict.end()){
v[i] = true;
break;
}
}
}
return v[len];
}
};