分割回文串II
Posted qiuhaifeng
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了分割回文串II相关的知识,希望对你有一定的参考价值。
给定一个字符串 s,将 s 分割成一些子串,使每个子串都是回文串。
返回符合要求的最少分割次数。
示例:
输入:?"aab"
输出: 1
解释: 进行一次分割就可将?s 分割成 ["aa","b"] 这样两个回文子串。
class Solution {
public:
int ispalindrome(string s,int left,int right){
while(left<right){
if(s[left]==s[right]){
left++;
right--;
}
else{
break;
}
}
if(left<right){
return 0;
}
return 1;
}
int dfs(string s,int left,int right,vector<vector<int>>&pa,vector<vector<int>>&dp){
if(dp[left][right]!=-1)
return dp[left][right];
int res = right-left;
if(pa[left][right]==1||ispalindrome(s,left,right)==1){
pa[left][right]=1;
dp[left][right]=0;
return 0;
}
else{
pa[left][right]=0;
}
if(left==right)
{
dp[left][right]=1;
return 1;
}
for(int i=left;i<right;i++){
res = min(res,dfs(s,left,i,pa,dp)+dfs(s,i+1,right,pa,dp)+1);
}
dp[left][right]=res;
return res;
}
int minCut(string s) {
vector<vector<int>>pa(s.size(),vector<int>(s.size(),-1));
vector<vector<int>>dp(s.size(),vector<int>(s.size(),-1));
return dfs(s,0,s.size()-1,pa,dp);
}
};
以上是关于分割回文串II的主要内容,如果未能解决你的问题,请参考以下文章
分割回文串 II · Palindrome Partitioning II
Leetcode No.132 分割回文串 II(动态规划)
Leetcode No.132 分割回文串 II(动态规划)