标签:Offer int 094 II vis ans 区间 2010 dp
先用区间dp求出每个i,j是否为回文串
然后找出最小的分割次数即可
一个好的做法:
对于求任意区间[i, j]的问题,可以先遍历区间长度,从1开始,一直到n,每次找出dp[i, j] dp[i + 1, j - 1]之间的关系,这样也能遍历所有的区间,
并求出想要的答案
class Solution { public: int vis[2010][2010]; int ans[2010][2010]; int cut(int j, string s) { if(vis[0][j]) { ans[0][j] = 0; return 0; } if(ans[0][j] != -1) return ans[0][j]; int cnt = 9999; for(int i = 1; i <= j; i++) { if(vis[i][j]) { cnt = min(cnt, cut(i - 1, s) + 1); } } ans[0][j] = cnt; return cnt; } int minCut(string s) { memset(vis, -1, sizeof(vis)); memset(ans, -1, sizeof(ans)); int len = s.length(); for(int i = 0; i < len; i++) vis[i][i] = 1; for(int k = 2; k <= len; k++) { for(int i = 0; i + k <= len; i++) { int j = i + k - 1; if(k == 2) vis[i][j] = (s[i] == s[j]); else vis[i][j] = (s[i] == s[j]) && vis[i + 1][j - 1]; } } return cut(len - 1, s); } };
标签:Offer,int,094,II,vis,ans,区间,2010,dp 来源: https://www.cnblogs.com/WTSRUVF/p/15784937.html
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。