引用华科平凡大佬的原话,很精辟:
如要输出所有的解,往往深度优先搜索;
如要求出解的个数或最优解,往往动态规划
本题要求输出字符串的所有回文字串组合,因此用深度优先搜索(代码思路同样借鉴了大佬,判断回文的部分简直妙极了):
//
// 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());
}
};
京公网安备 11010502036488号