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"
.
解题思路:
水DP。但是我发现自己存在一个严重的问题,是时候阅读C++11的标准文档了。unordered_set具体在哪用我还不太清楚,但是本题中至少可以实现对字符串的O(1)的查找。
class Solution {
public:
bool wordBreak(string s, unordered_set<string>& wordDict) {
bool dp[1010];
int n = s.length();
string s1, s2;
memset(dp, false, sizeof(dp));
dp[0] = true;
for(int i = 1; i <= n; ++i) {
s1 = s2 = "";
for(int j = i; j >= 1; --j) {
s2 += s[j-1];
s2 += s1;
if(wordDict.find(s2) != wordDict.end()) {
dp[i] |= dp[j-1];
}
if(dp[i]) break;
s1 = s2;
s2 = "";
}
}
return dp[n];
}
};