- 问题来源
- 问题简介
设计一个函数,接收一个字符串s和一个字典dict(字符串列表,无重复),要求返回s是否能被若干个dict里的字符串构成。
解题思路
令len为字符串S的长度。
令Si代表由前i个字符组成的字符串,i = {1,2….len-};
如果我们知道了Si能否由dict里的字符串构成,就只需检测剩下的S[i, len]是否存在于字典。
同时,对于Si能否由dict里的字符串构成,这又是同样的一个问题了。
时间复杂度 | 空间复杂度 |
---|---|
O(未知) | O(未知) |
Code
class Solution {
public:
bool wordBreak(string s, vector<string>& wordDict) {
int size = s.length();
vector<bool> avalible(size + 1, false);
unordered_set<string> set;
for (auto str : wordDict) {
set.insert(str);
}
auto notFound = set.end();
avalible[0] = true;
for (int i = 1; i <= size; i++) {
for (int j = i - 1; j >= 0; j--) {
if (avalible[j] && set.find(s.substr(j, i - j)) != notFound) {
avalible[i] = true;
break;
}
}
}
return avalible[size];
}
};