Skip to content

Commit f253e25

Browse files
committed
Create Word_Break_II.cc
1 parent 71f413d commit f253e25

File tree

1 file changed

+40
-0
lines changed

1 file changed

+40
-0
lines changed

Word_Break_II.cc

Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,40 @@
1+
class Solution {
2+
public:
3+
vector<string> wordBreak(string s, unordered_set<string> &dict) {
4+
// Note: The Solution object is instantiated only once and is reused by each test case.
5+
if (s == "")
6+
return vector<string>();
7+
dp.assign(s.length() + 1, vector<int>());
8+
dp[0].push_back(-1);
9+
for (int i = 0; i < s.length(); i++) {
10+
if (dp[i].size() == 0)
11+
continue;
12+
for (int j = 1; i + j <= s.length(); j++) {
13+
if (dict.find(s.substr(i, j)) != dict.end()) {
14+
dp[i + j].push_back(i);
15+
}
16+
}
17+
}
18+
19+
vector<string> ret;
20+
string tmp = "";
21+
22+
dfs(ret, tmp, s, s.length());
23+
return ret;
24+
}
25+
private:
26+
vector< vector<int> > dp;
27+
void dfs(vector<string> &ret, string tmp, string &s, int cur) {
28+
if (cur == 0) {
29+
ret.push_back(tmp);
30+
return;
31+
}
32+
for (int i = 0; i < dp[cur].size(); i++) {
33+
if (cur == s.length()) {
34+
dfs(ret, s.substr(dp[cur][i], cur - dp[cur][i]), s, dp[cur][i]);
35+
} else {
36+
dfs(ret, s.substr(dp[cur][i], cur - dp[cur][i]) + " " + tmp, s, dp[cur][i]);
37+
}
38+
}
39+
}
40+
};

0 commit comments

Comments
 (0)