将一个长字符串切割为所有回文字符串组合的DFS解法
题目描述
给定一个字符串s,分割s使得s的每一个子串都是回文串
返回所有的回文分割结果。(注意:返回结果的顺序需要和输入字符串中的字母顺序一致。)
示例
输入
"dde"
返回值
[["d","d","e"],["dd","e"]]
这是一道比较常规的dfs题目,
如要输出所有的解,往往深度优先搜索;
如要求出解的个数或最优解,往往动态规划。
那么此处就使用dfs来解。
思路大致这样,对长字符串分析,每次遇到的回文串推进字符串数组,然后对当前的字符串数组进行深度遍历,直到长字符串的结尾。
回文串的判定我发现有个大佬给了很简单的做法。
s == string(s.rbegin(), s.rend());
利用了一个反向迭代器,这样能一条语句就得到是否是回文字符,很方便,很巧妙。
题目比较简单,此处给出代码:
1 class Solution { 2 public: 3 vector<vector<string> > partition(string s) { 4 vector<vector<string>> res; 5 vector<string> vec; 6 dfs(res,vec,s);//这里开始dfs 7 return res; 8 } 9 void dfs(vector<vector<string>> &res,vector<string> &vec,string s){ 10 if(s.size()<1){res.push_back(vec);return;} 11 for(int i=1;i<=s.size();i++){//i是回文字符的长度 所以有个=判断 12 string str=s.substr(0,i); 13 if(str==string(str.rbegin(),str.rend())){//妙啊 回文判断太简单了 14 vec.push_back(str); 15 dfs(res,vec,s.substr(i)); //已经判断是回文的部分直接断开 16 vec.pop_back();//dfs的回溯 其他分支的遍历需要退回一个当前元素 17 } 18 } 19 } 20 };

浙公网安备 33010602011771号