分割回文串
给定一个字符串 s,将 s 分割成一些子串,使每个子串都是回文串。
返回符合要求的最少分割次数。
示例:
输入: "aab"
输出: 1
解释: 进行一次分割就可将 s 分割成 ["aa","b"] 这样两个回文子串。
1 class Solution{ 2 public: 3 int minCut(string s){ 4 int n=s.size(); 5 vector<vector<bool>> isPalin(n,vector<bool>(n,false)); 6 vector<int> min(n+1,-1); 7 for(int i=0;i<n;i++){ 8 isPalin[i][i]=true; 9 } 10 for(int i=n-1;i>=0;i--){ 11 min[i]=min[i+1]+1; 12 for(int j=i+1;j<n;j++){ 13 if(s[i]==s[j]){ 14 if(j==i+1||isPalin[i+1][j-1]==true){ 15 isPalin[i][j]=true; 16 if(j==n-1){ 17 min[i]=0; 18 }else if(min[i]>min[j+1]+1){ 19 min[i]=min[j+1]+1; 20 } 21 } 22 } 23 } 24 } 25 return min[0]; 26 } 27 };