leetcodeSolution to some Leetcode problems written in C++ |
git clone git://git.dimitrijedobrota.com/leetcode.git |
Log | Files | Refs | README | LICENSE |
0131.cpp (1453B)
0 // Backtracking
1 class Solution {
2 vector<string> st;
3 vector<vector<string>> res;
5 bool valid(const string &s) {
6 int i = 0, j = s.size() - 1;
7 while (i < j)
8 if (s[i++] != s[j--]) return false;
9 return true;
10 }
12 void dfs(const string &s, int pos) {
13 if (pos == s.size()) res.push_back(st);
15 string crnt = "";
16 for (int i = pos; i < s.size(); i++) {
17 crnt += s[i];
18 if (valid(crnt)) {
19 st.push_back(crnt);
20 dfs(s, i + 1);
21 st.pop_back();
22 }
23 }
24 }
26 public:
27 vector<vector<string>> partition(string s) {
28 dfs(s, 0);
29 return res;
30 }
31 };
33 // Backtracking with DP
34 class Solution {
35 vector<string> st;
36 vector<vector<string>> res;
38 void dfs(const string &s, int pos, vector<vector<bool>> &dp) {
39 if (pos == s.size()) res.push_back(st);
41 string crnt = "";
42 for (int i = pos; i < s.size(); i++) {
43 crnt += s[i];
44 if (s[pos] == s[i] && (i - pos < 2 || dp[pos + 1][i - 1])) {
45 dp[pos][i] = true;
46 st.push_back(crnt);
47 dfs(s, i + 1, dp);
48 st.pop_back();
49 }
50 }
51 }
53 public:
54 vector<vector<string>> partition(string s) {
55 vector<vector<bool>> dp(s.size(), vector<bool>(s.size(), false));
56 dfs(s, 0, dp);
57 return res;
58 }
59 };