题目一:
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"] ]解题思路:
1)用一个二维数组来存取两者之间是否是回文。
2)从字符串尾部开始存入可能的回文串。
代码:
class Solution { public: vector<vector<string>> partition(string s) { int len = s.size(); vector<vector<bool>>f(len+1,vector<bool>(len)); for (int i=1;i<len+1;i++) { for (int j = i-1;j>=0;j--) { if(ispalindrome(s,j,i-1)==1) { f[i][j]=true; } } } dealstring(s,len,f); return m_str; } private: vector<vector<string>>m_str; vector<string>m_temstr; void dealstring(string s,int count,const vector<vector<bool>>&f) { if (count == 0) { vector<string>oneanswer(m_temstr.rbegin(),m_temstr.rend()); m_str.push_back(oneanswer); } for (int i=0;i<count;i++) { if (f[count][i]) { m_temstr.push_back(s.substr(i,count-i)); dealstring(s,i,f); m_temstr.pop_back(); } } } int ispalindrome(string s,int i,int j) { while (i<j) { if (s[i]!=s[j]) { return 0; } i++; j--; } return 1; } };
Given a string s, partition s such that every substring of the partition is a palindrome.
Return the minimum cuts needed for a palindrome partitioning of s.
For example, given s = "aab"
,
Return 1
since the palindrome partitioning ["aa","b"]
could
be produced using 1 cut.
解题思路:
1)用二维数组存入判断两者之间是否是回文。
2)同时用一个一维数组存取从这个点开始往右的最小切数。
代码:
class Solution { public: int minCut(string s) { int size = s.size(); int mincount[size+1]; vector<vector<bool> >m_bool(size,vector<bool>(size)); for(int i=0;i<=size;i++) { mincount[i] = size-1-i; } for(int j=size-1;j>=0;j--) { for(int k = j;k<size;k++) if(s[j]==s[k]&&(k-j<2||m_bool[j+1][k-1])) { m_bool[j][k]=true; mincount[j]=min(mincount[j],mincount[k+1]+1); } } return mincount[0]; } };
leetcode题目:Palindrome Partitioning 和Palindrome Partitioning II,布布扣,bubuko.com
leetcode题目:Palindrome Partitioning 和Palindrome Partitioning II
原文地址:http://blog.csdn.net/woailiyin/article/details/25724207