您的位置:首页 > 其它

leetcode 139 —— Word Break

2015-08-14 20:37 375 查看
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"
.

思路1:递归,but超时

class Solution {
public:
bool flag=false;
bool wordBreak(string s, unordered_set<string>& wordDict) {
dfs(0, s, wordDict);
return flag;
}

void dfs(int level,string &s, unordered_set<string>& wordDict){
if (flag)
return;
if (level == s.size()){
flag = true;
return;
}

for (int i = level; i < s.size(); i++){
if (wordDict.count(s.substr(level,i-level+ 1))>0){
dfs(i + 1, s, wordDict);
}
}
}
};

思路2:DP

class Solution {
public:
bool wordBreak(string s, unordered_set<string>& wordDict) {
int n = s.size();
vector<bool> dp(n, false);
dp[0] = wordDict.count(s.substr(0,1)) > 0 ? true : false;
for (int i = 1; i < n; i++){
if (wordDict.count(s.substr(0, i+1))>0){
dp[i] = true;
continue;
}
for (int j = i - 1; j >= 0; j--){
if ((wordDict.count(s.substr(j + 1, i - j))>0) && dp[j]){
dp[i] = true;
break;
}
}
}
return dp[n - 1];
}
};
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: