码迷,mamicode.com
首页 > 其他好文 > 详细

Palindrome Partitioning II

时间:2015-04-18 18:56:50      阅读:121      评论:0      收藏:0      [点我收藏+]

标签:

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

			}

		}
	}
};

 

Palindrome Partitioning II

标签:

原文地址:http://www.cnblogs.com/xgcode/p/4437739.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!