[leetcode] 139. Word Break 解题报告
来源:互联网 发布:obs是什么软件 编辑:程序博客网 时间:2024/06/05 01:51
题目链接:https://leetcode.com/problems/word-break/
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"
.
思路: 一个比较直观的想法是DFS, 但是需要注意的是要记录搜索过的状态, 不然会超时.
代码如下:
class Solution {public: bool DFS(string& s, unordered_set<string>& wordDict, int k) { if(k == s.size()) return true; if(hash.count(k)) return hash[k]; for(int i = k; i < s.size(); i++) { string str = s.substr(k, i-k+1); if(!wordDict.count(str)) continue; bool ans = DFS(s, wordDict, i+1); hash[i+1] = ans; if(ans == true) return true; } return false; } bool wordBreak(string s, unordered_set<string>& wordDict) { return DFS(s, wordDict, 0); }unordered_map<int, bool> hash;};
参照http://fisherlei.blogspot.com/2013/11/leetcode-word-break-solution.html 这里的方法重新写了一个。
还有一种思路应该是自底上下dp搜索,用dp数组记录状态,记录每一位之前的字串是否可以由字典构成
如果s的一个子串是否可以由字典子集构成有三种情况
1. 如果子串本身就在字典中,则可以
2. 如果字串可以存在一个k使得之前的字串是可以由字典构成,k到i的字串存在在字典中,则此字串也是可以由字典构成的
3. 如果上述两种情况都不成立,则说明这个字串不可以由字典构成
这样遍历到最后就可以得到最后一位是否可以由字典构成。时间复杂度为O(n*n), 空间复杂度为O(n)
具体代码如下:
class Solution {public: bool wordBreak(string s, unordered_set<string>& wordDict) { int len = s.size(); vector<int> dp(len+1, 0); dp[len] = 1; for(int i = len-1; i >= 0; i--) { string substr; for(int j = i; j < len; j++) { substr += s[j]; if(wordDict.count(substr) && dp[j+1]) dp[i] = 1; } } return dp[0]; }};
0 0
- [leetcode] 139. Word Break 解题报告
- [Leetcode] 139. Word Break 解题报告
- LeetCode Word Break 解题报告
- 【LeetCode】Word Break 解题报告
- [LeetCode]Word Break,解题报告
- Word Break [Leetcode解题报告]
- LeetCode — Word Break II 解题报告
- LeetCode — Word Break 解题报告
- LeetCode Word Break II 解题报告
- [LeetCode OJ] Word Break II 解题报告
- [LeetCode OJ] Word Break 解题报告
- 【LeetCode】Word Break II 解题报告
- [leetcode] 140. Word Break II 解题报告
- [Leetcode] 140. Word Break II 解题报告
- word break解题报告
- leetCode Word Break解题分享
- Leetcode Word Search 解题报告
- LeetCode Word Ladder解题报告
- cocos2dx播放音乐
- 收藏一个Ping的小工具类,可用于网络中检测目的设备是否在线
- ubuntu下的mysql不支持中文,修改方法;
- C语言入门----输出语句
- codeforces 76A Gift 最小生成树
- [leetcode] 139. Word Break 解题报告
- 如何获取一个范围内的随机整数
- Python中*args 和**kwargs的用法探讨
- 进击的KFC:OC(五): 字典、集、数组排序
- 在java中输入某年某月,判断这一天是是这一年的第多少天
- 剑指Offer--字符流中第一个不重复的字符
- 使用apktool等工具反编译apk包
- 扩展欧几里得--解一元线性方程CodeForces -7C
- map的使用