本文共 943 字,大约阅读时间需要 3 分钟。
题目描述:
给定一个字符串 s,将 s 分割成一些子串,使每个子串都是回文串。
返回 s 所有可能的分割方案。
示例:
输入: "aab"输出:[ ["aa","b"], ["a","a","b"]]
AC C++ Solution:
解题思路:
循环遍历字符串,检查substr(0,i)是否是回文。如果是,则在子字符串的其余部分递归调用dfs():substr(i + 1,length)。到目前为止,将当前的回文分区保留在dfs()的'path'参数中。到达字符串末尾时,在结果中添加当前分区。代码:
class Solution {public: vector> partition(string s) { vector > ret; if(s.empty()) return ret; vector path; dfs(0, s, path, ret); return ret; } void dfs(int index, string& s, vector & path, vector >& ret) { if(index == s.size()) { ret.push_back(path); return; } for(int i = index; i < s.size(); ++i) { if(isPalindrome(s, index, i)) { path.push_back(s.substr(index, i - index + 1)); dfs(i+1, s, path, ret); path.pop_back(); } } } bool isPalindrome(const string& s, int start, int end) { while(start <= end) { if(s[start++] != s[end--]) return false; } return true; }};
转载地址:http://vgnkb.baihongyu.com/