Palindrome Partitioning

来源:互联网 发布:企业域名是什么意思 编辑:程序博客网 时间:2024/06/04 18:37

暴力搜索寻找回文字符串(所有字符扫一遍),找到后用dfs做排列组合(这两步同时进行),空间复杂度时间复杂度双高,时间复杂度大概是O(n^2)

Palindrome Partitioning II 的解法与这道题大体相同,只不过为了节省时间,用了DP来找回文字符串,比上面提到的找回文方法好一些

class Solution {public:vector<vector<string> > partition(string s){vector<vector<string> > result;vector<string> list;if (s.size() == 0)return result;calResult(result, list, s);return result;}bool isPalindrome(string str){int i = 0;int j = str.size() - 1;while (i < j) {if (str[i] != str[j]) {return false;}i++;j--;}return true;}void calResult(vector<vector<string> > &result, vector<string> list, string str){//当处理到传入的字符串长度等于0,则这个集合list满足条件,加入到结果集中if (str.length() == 0)result.push_back(vector<string>(list));int len = str.length();//递归调用//字符串由前往后,先判断str.substring(0, i)是否是回文字符串//如果是的话,继续调用函数calResult,把str.substring(i)字符串传入做处理for (int i = 1; i <= len; ++i) {string subStr = str.substr(0, i);if (isPalindrome(subStr)) {list.push_back(subStr);string restSubStr = str.substr(i, str.size() - 1);calResult(result, list, restSubStr);list.pop_back();}}}};


0 0
原创粉丝点击