标签:
这道题竟然被我做出来了,不过还是参考别人的,附代码,其中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