word break

思路

首先遍历字符串的每一字串是可以做出来的,但是时间复杂度太高,所以用动态规划的办法,可以省下不少时间。
具体的想法就是维护一个vector v,用i,j来遍历字符串s,使得每个子循环里v[i] = v[j] + v[i -j]

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
class {
public:
bool wordBreak(string s, vector<string>& wordDict) {
vector<bool> tables(s.size() + 1, false);
tables[0] = true
for (int i = 1; i <= s.size(); i++) {
for (int j = i - 1; j >= 0; j--) {
if (tables[j]) {
string word = s.substr(j, i - j);
if (wordDict.find(word) != wordDict.end()) {
tables[i] = true;
break;
}
}
}
}
return tables[s.size()];
}
};