Palindrome Partitioning I and II leetcode
2014-08-26 19:38
302 查看
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 =
Return
DFS:
class Solution {
public:
vector<vector<string>> partition(string s) {
vector<vector<string> > res;
vector<string> tmp;
if(s.size() == 0) {
res.push_back(tmp);
return res;
}
findp(res,tmp,s,0);
return res;
}
void findp(vector<vector<string> >& res, vector<string>& tmp,const string s, int start) {
if(start == s.size()) {
res.push_back(tmp);
return;
}
for(int i= start+1;i<=s.size();i++) {
if(isPa(s.substr(start,i-start))) {
tmp.push_back(s.substr(start,i-start));
findp(res,tmp,s,i);
tmp.pop_back();
}
}
}
bool isPa(string s) {
int begin = 0;
int end = s.size()-1;
while(begin<end) {
if(s[begin] != s[end])
return false;
begin++;
end--;
}
return true;
}
};
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 =
Return
be produced using 1 cut.
Calculate and maintain 2 DP states:
pal[i][j] , which is whether s[i..j] forms a pal
d[i], which is the minCut for s[i..n-1]
Once we comes to a pal[i][j]==true:
if j==n-1, the string s[i..n-1] is a Pal, minCut is 0, d[i]=0;
else: the current cut num (first cut s[i..j] and then cut the rest s[j+1...n-1]) is 1+d[j+1], compare it to the exisiting minCut num d[i], repalce if smaller.
d[0] is the answer.
Return all possible palindrome partitioning of s.
For example, given s =
"aab",
Return
[ ["aa","b"], ["a","a","b"] ]
DFS:
class Solution {
public:
vector<vector<string>> partition(string s) {
vector<vector<string> > res;
vector<string> tmp;
if(s.size() == 0) {
res.push_back(tmp);
return res;
}
findp(res,tmp,s,0);
return res;
}
void findp(vector<vector<string> >& res, vector<string>& tmp,const string s, int start) {
if(start == s.size()) {
res.push_back(tmp);
return;
}
for(int i= start+1;i<=s.size();i++) {
if(isPa(s.substr(start,i-start))) {
tmp.push_back(s.substr(start,i-start));
findp(res,tmp,s,i);
tmp.pop_back();
}
}
}
bool isPa(string s) {
int begin = 0;
int end = s.size()-1;
while(begin<end) {
if(s[begin] != s[end])
return false;
begin++;
end--;
}
return true;
}
};
Palindrome Partitioning II
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
1since the palindrome partitioning
["aa","b"]could
be produced using 1 cut.
Calculate and maintain 2 DP states:
pal[i][j] , which is whether s[i..j] forms a pal
d[i], which is the minCut for s[i..n-1]
Once we comes to a pal[i][j]==true:
if j==n-1, the string s[i..n-1] is a Pal, minCut is 0, d[i]=0;
else: the current cut num (first cut s[i..j] and then cut the rest s[j+1...n-1]) is 1+d[j+1], compare it to the exisiting minCut num d[i], repalce if smaller.
d[0] is the answer.
class Solution { public: int minCut(string s) { int n = s.size(); if(n == 0 || n == 1) return 0; vector<int> dp(n,0); <span style="background-color: rgb(255, 255, 102);">vector<vector<int> > pal(n,vector<int>(n,0));</span> for(int i=n-1;i>=0;i--) { dp[i] = n-1-i; for(int j=i;j<n;j++) { if(s[i]==s[j] && ((j-i)<2 || pal[i+1][j-1] == 1)) { pal[i][j] = 1; if(j == n-1) { dp[i] = 0; } else if(dp[i]>(dp[j+1]+1)) dp[i] = dp[j+1]+1; } } } return dp[0]; } };
相关文章推荐
- [Leetcode]Palindrome Partitioning II
- leetcode -- Palindrome Partitioning II
- leetcode:Palindrome Partitioning II
- [LeetCode] Palindrome Partitioning II
- 【leetcode】Palindrome Partitioning II
- [leetcode]Palindrome Partitioning II
- leetcode - Palindrome Partitioning II
- [leetcode] Palindrome Partitioning II
- [Leetcode]Palindrome Partitioning II
- LeetCode-Palindrome Partitioning II
- leetcode Palindrome Partitioning II
- LeetCode - Palindrome Partitioning II
- [leetcode刷题系列]Palindrome Partitioning II
- leetcode 123: Palindrome Partitioning II
- [leetcode] Palindrome Partitioning II
- LeetCode_Palindrome Partitioning II
- LeetCode-Palindrome Partitioning II
- LeetCode : Palindrome Partitioning II
- LeetCode Palindrome Partitioning II
- LeetCode: Palindrome Partitioning II