class Solution {
public:
int minCut(string s) {
// Start typing your C/C++ solution below
// DO NOT write int main() function
int len=s.length();
bool b[len][len];
int div[len+1];
int i,j,k;
for(i=0;i<len;++i){
for(j=0;j<len;++j){
b[i][j]=false;
}
}
div[0]=-1;
for(i=1;i<=len;++i)
div[i]=i-1;
for(i=0;i<len;++i){
for(j=0;j<=i;++j){
if(s[i]==s[j]&&(i-j<2||b[i-1][j+1])){
b[i][j]=true;
div[i+1]=min(div[i+1],div[j]+1);
}
}
}
return div[len];
}
};