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 =
dict =
Return true because
思路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];
}
};
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];
}
};
相关文章推荐
- 每日一记之ASimpleCache缓存框架的使用方法
- 简单REST 客户端使用 SQL,Hadoop,Drill
- Black Box(POJ--1442
- 猴子的智商
- 复旦大学高等代数课程学习资料推荐
- A* 寻路算法
- 从PHP 到JAVA
- Cookie和是Session
- 图的基本存储的基本方式一
- HDU-2084 数塔
- PPT自动载入图片并矩阵分布
- [转]XML中元素(Element)与节点(Node)的区别
- Oracle 学习之RAC(九) 集群负载均衡及故障转移
- 【xml】xml初步总结
- 计数排序
- 关于Hibernate中的普通增删改查
- 图的基本存储的基本方式二 (链表)
- POJ 2411 大矩形用1X2小矩形填充 状态dp DFS
- --acm的思考
- C语言第12轮:指针