Skip to content

Commit bed7eff

Browse files
committed
cpp
1 parent 4d44ab4 commit bed7eff

File tree

1 file changed

+55
-0
lines changed

1 file changed

+55
-0
lines changed
Lines changed: 55 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,55 @@
1+
class Solution {
2+
public:
3+
4+
vector<string> ans;
5+
vector<vector<int>> dp;
6+
unordered_set<string> dict;
7+
vector<int> used;
8+
int mx;
9+
10+
bool getAns(int i,string &s,string x) {
11+
if(i==s.length()) {
12+
x.pop_back();
13+
ans.push_back(x);
14+
return true;
15+
}
16+
17+
string temp;
18+
if(used[i]!=-1) {
19+
if(used[i]==0) return 0;
20+
for(auto j: dp[i]) {
21+
temp= string(s.begin()+i,s.begin()+j);
22+
getAns(j,s,x+temp+" ");
23+
}
24+
return true;
25+
}
26+
27+
temp="";
28+
used[i]=0;
29+
for(int j=i;j<s.length();j++) {
30+
temp+=s[j];
31+
if(dict.find(temp) !=dict.end() ) {
32+
bool b= getAns(j+1,s,x+temp+" ");
33+
if(b) dp[i].push_back(j+1);
34+
used[i]= used[i]||b;
35+
}
36+
if(j-i+1>=mx) break;
37+
}
38+
39+
return used[i];
40+
}
41+
42+
vector<string> wordBreak(string s, vector<string>& wordDict) {
43+
ans.clear(); dict.clear(); dp.clear(); used.clear();
44+
dp.resize(s.length()); mx=0;
45+
used.resize(s.length(),-1);
46+
47+
for(auto &i: wordDict) {
48+
dict.insert(i);
49+
int x=i.length();
50+
mx= max(mx,x);
51+
}
52+
getAns(0,s,"");
53+
return ans;
54+
}
55+
};

0 commit comments

Comments
 (0)