Given a string s, partition s such that every substring of the partition is a palindrome.
Return all possible palindrome partitioning of s.
Example:
Input: "aab" Output: [ ["aa","b"], ["a","a","b"] ]
Approach #1: backtracking. [C++]
class Solution { public: vector<vector<string>> partition(string s) { vector<vector<string>> ans; if (s.length() == 0) return ans; vector<string> path; dfs(s, 0, ans, path); return ans; } private: void dfs(const string s, int idx, vector<vector<string>>& ans, vector<string>& path) { if (s.length() == idx) { ans.push_back(path); return; } for (int i = idx; i < s.length(); ++i) { if (isPalindrome(s, idx, i)) { path.push_back(s.substr(idx, i-idx+1)); // this is the point code in this problem. dfs(s, i+1, ans, path); path.pop_back(); } } } bool isPalindrome(const string s, int start, int end) { while (start <= end) { if (s[start++] != s[end--]) return false; } return true; } };