引用华科平凡大佬的原话,很精辟:
如要输出所有的解,往往深度优先搜索;
如要求出解的个数或最优解,往往动态规划
本题要求输出字符串的所有回文字串组合,因此用深度优先搜索(代码思路同样借鉴了大佬,判断回文的部分简直妙极了):
// // Created by jt on 2020/8/23. // #include <vector> #include <string> using namespace std; class Solution { public: /** * * @param s string字符串 * @return string字符串vector<vector<>> */ vector<vector<string> > partition(string s) { // write code here vector<vector<string>> res; vector<string> vec; dfs(res, vec, s); return res; } void dfs(vector<vector<string>> &res, vector<string> &vec, string s) { if (s.size() < 1) { res.push_back(vec); return; } for (int i = 1; i <= s.size(); ++i) { // ⚠️注意:i的含义是数组大小,因此这里是小于等于 string sub = s.substr(0, i); if (isPalindrome(sub)) { vec.push_back(sub); dfs(res, vec, s.substr(i)); vec.pop_back(); } } } bool isPalindrome(string s) { return s == string(s.rbegin(), s.rend()); } };