首页 > 代码库 > Palindrome Partitioning
Palindrome Partitioning
/* Given a string s, partition s such that every substring of the partition is a palindrome. Return all possible palindrome partitioning of s. For example, given s = "aab", Return ["aa","b"], ["a","a","b"] */ #include<vector> #include<string> using namespace std; #if 0//wrong class Solution { public: vector<vector<string>> partition(string s) { int len = s.size(); vector<vector<string>> res; auto s_iter = s.begin(); for (int i = 0; i < len; i++){ vector<string> tmp; for (int j = i; j < len; j++){ //string s(s_iter + i, s_iter + j + 1); string str = s.substr(i, j + 1); if (is_palindrome(s, i,j)){ tmp.push_back(s); } } res.push_back(tmp); } return res; } private: bool is_palindrome(string &s, int head_index, int tail_index){ while (head_index < tail_index){ if (s[head_index]!= s[tail_index]) return false; head_index++; tail_index--; } return true; } }; #elif 1 //LeetCode, Palindrome Partitioning // 时间复杂度 O(2^n),空间复杂度 O(n) class Solution { public: vector<vector<string>> partition(string s) { vector<vector<string>> result; vector<string> output; // 一个 partition 方案 DFS(s, 0, output, result); return result; } // 搜索必须以 s[start] 开头的 partition 方案 void DFS(string &s, int start, vector<string>& output, vector<vector<string>> &result) { if (start == s.size()) { result.push_back(output); return; } for (int i = start; i < s.size(); i++) { if (isPalindrome(s, start, i)) { output.push_back(s.substr(start, i - start + 1)); DFS(s, i + 1, output, result); // 继续往下砍 output.pop_back(); // 撤销上一个 push_back 的砍 } } } bool isPalindrome(string &s, int start, int end) { while (start < end) { if (s[start] != s[end]) return false; start++; end--; } return true; } }; #endif void test0(){ string s= "aab"; Solution ss; auto res = ss.partition(s); int we; } int main(){ test0(); system("pause"); return 0; }
Palindrome Partitioning
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。