标签:
这道题竟然被我做出来了,不过还是参考别人的,附代码,其中result[i]的意思是从i元素到最后需要的最小切割个数。哈哈
class Solution { public: typedef vector<vector<int>> Sdata; int minCut(string s) { int len = s.length(); Sdata buf(len,vector<int>(len)); dp(s,buf); vector<int> result(len); int mindata = numeric_limits<int>::max(); if(s.size() == 1) return 0; result[len-1] = 0; for(int i = len-2; i>=0; i--) { if(buf[i][len-1] == 1) { result[i] =0; continue; } mindata = 1+result[i+1]; for(int j = i + 1; j<=len-1;j++) { if(buf[i][j] == 1) { if(mindata > 1 + result[j+1]) { mindata = 1 + result[j+1]; } } } result[i] = mindata; } return result[0]; } void dp(const string& s,vector<vector<int>>& buf) { for(int i=s.length()-1; i>=0;i--) for(int j=i; j<s.length();j++) { if(i == j) { buf[i][j] =1; } else { if(s[i] == s[j]) { if(i+1 >= j-1 || buf[i+1][j-1] == 1) { buf[i][j] = 1; } } } } } };
标签:
原文地址:http://www.cnblogs.com/xgcode/p/4437739.html