1 题目描述
给定一个字符串s,分割s使得s的每一个子串都是回文串
返回所有的回文分割结果。(注意:返回结果的顺序需要和输入字符串中的字母顺序一致。)
例如:给定字符串s=“aab”,
返回
[[“aa”,“b”],[“a”,“a”,“b”]]
示例1
输入
“dde”
输出
[[“d”,“d”,“e”],[“dd”,“e”]]
2 解题思路
深度优先搜索
3 代码实现
class Solution {
public:
/**
*
* @param s string字符串
* @return string字符串vector<vector<>>
*/
vector<vector<string> > partition(string s) {
// write code here
vector<vector<string>> listOfListOfStr;
vector<string> listOfStr;
dfs(s, listOfListOfStr, listOfStr);
return listOfListOfStr;
}
private:
void dfs(string s, vector<vector<string>> &listOfListOfStr, vector<string> &listOfStr){
if(s == ""){
listOfListOfStr.push_back(listOfStr);
return;
}
for(int i = 1; i <= s.length(); i++){
string subStr = s.substr(0, i);
if(isPalindrome(subStr)){
listOfStr.push_back(subStr);
dfs(s.substr(i, s.length()), listOfListOfStr, listOfStr);
listOfStr.pop_back();
}
}
}
bool isPalindrome(string s){
return s == string(s.rbegin(), s.rend());
}
};
4 运行结果
运行时间:7ms
占用内存:836k