leetCode

    xiaoxiao2022-06-23  17

    题意:给定一个字符串,要把他这个字符串分成若干个回文子串。问数目最小是多少。

    题解:动态规划。用ans[j]表示以j结尾的回文子串数量,则如果s(0,j)是回文串,则ans[j]=1,否则 ans[j]=min(ans[i-1])+1,并且s(i,j)是回文串。

    代码:

    int minCut(string s) { int i,j,k,l=s.length(),left,right; vector<int> ans; vector<vector<bool> > is(l, vector<bool>(l, false)); for(i=0; i<l; i++) { is[i][i]=true; ans.push_back(i+1); } for(i=2; i<=l; i++) { for(j=0; j<l-i+1; j++) { left=j; right=j+i-1; if((i==2||is[left+1][right-1]==true)&&s[left]==s[right]) is[left][right]=true; } } for(i=0;i<l;i++) { for(j=0;j<=i;j++) { if(is[j][i]) { if(j==0) ans[i]=1; else ans[i]=min(ans[i],ans[j-1]+1); } } } return ans[l-1]-1; }

    转载请注明原文地址: https://ju.6miu.com/read-1123250.html

    最新回复(0)