【题目描述】Given a string s, partition s such that every substring of the partition is a palindrome.
Return all possible palindrome partitioning of s.
For example, given s =“aab”,
Return
[
[“aa”,“b”],
[“a”,“a”,“b”]
]
将字符串分割成回文串
【解题思路】本题是回溯法的题目,回溯法总是和深度优先遍历有关,相关函数的命名为dfs()。遍历的方式是递归,递归传入的重要参数为当前数组开始的位置。
本题还需要判断当前字符串是否为回文串,定义函数isPali()。
【考查内容】字符串,回溯法
class Solution {
public:
vector<vector<string>> partition(string s) {
vector<vector<string>> ans;
vector<string> tmp;
dfs(ans, tmp, 0, s);
return ans;
}
bool isPali(string s){
for(int i = 0; i < s.length() / 2; i ++)
if(s[i] != s[s.length() - i - 1])
return false;
return true;
}
void dfs(vector<vector<string>> &ans, vector<string> &tmp, int n, string s){
if(n == s.length()){
ans.push_back(tmp);
return;
}
for(int i = n; i < s.length(); i ++){
if(isPali(s.substr(n, i - n + 1))){
tmp.push_back(s.substr(n, i - n + 1));
dfs(ans, tmp, i + 1, s);
tmp.pop_back();
}
}
}
};