0%
Leetcode是烹小鲜,之前更类似于耍大刀。
这个题目递归解还是要调好久。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55
| class Solution { public: vector<string> braceExpansionII(string expression) { stack< pair<set<string>, set<string> > > st; set<string>x; x.insert(""); st.push(make_pair(set<string>(), x)); for(int i=0;i<expression.size();i++) { if(expression[i]=='{') { set<string>x; x.insert(""); st.push(make_pair(set<string>(), x)); } else if(expression[i]=='}') { for(auto g:st.top().second) { st.top().first.insert(g); } set<string>now = st.top().first; st.pop(); set<string>nxt; for(auto g:st.top().second) { for(auto k:now) { nxt.insert(g+k); } } st.top().second = nxt; } else if(expression[i]==',') { for(auto g:st.top().second) { st.top().first.insert(g); } set<string>x; x.insert(""); st.top().second=x; } else { set<string>x; for(auto g:st.top().second) { x.insert(g+expression[i]); } st.top().second=x; } } set<string>ans; for(auto t: st.top().second) { ans.insert(t); } for(auto t: st.top().first) { ans.insert(t); } vector<string>res; for(auto t:ans) { res.push_back(t); } return res; } };
|