LeetCode 132. 分割回文串 II
给定一个字符串 s,将 s 分割成一些子串,使每个子串都是回文串。
返回符合要求的最少分割次数。
示例:
输入: "aab"
输出: 1
解释: 进行一次分割就可将 s 分割成 ["aa","b"] 这样两个回文子串。
class Solution { public: int minCut(string s) { int n=s.size(); if(!n)return 0; vector<vector<bool>>c(n,vector<bool>(n,false)); for(int i=1;i<=n;i++){ for(int j=0;j<n-i+1;j++){ int l=j,r=j+i-1; c[l][r]=s[l]==s[r]&&(l+1>r-1||c[l+1][r-1]); } } vector<int>f(n+1); f[0]=0; for(int i=1;i<=n;i++){ f[i]=INT_MAX; for(int j=1;j<=i;j++){ if(c[j-1][i-1]) f[i]=min(f[i],f[j-1]+1); } } return f[n]-1; } };