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

			}

		}
	}
};

 

相关文章:

  • 2022-01-29
  • 2022-02-24
  • 2021-12-02
  • 2022-03-09
  • 2021-09-24
  • 2021-09-07
  • 2022-01-12
猜你喜欢
  • 2021-08-01
  • 2021-08-04
  • 2022-01-15
  • 2022-01-18
  • 2021-10-11
相关资源
相似解决方案