首页 > 其他 > 详细

Palindrome Partitioning

时间:2015-04-05 18:46:41      阅读:199      评论:0      收藏:0      [点我收藏+]

这道题采用动态规划的思想。参考了别人的做法。

class Solution{
public:
	vector<vector<string>> result;
    vector<vector<string>> partition(string s) {
     int len = s.length();
	 vector<string> soloresult;

	 if(s.length() == 0)
	 return result;
     vector<vector<int>> buf(len, vector<int>(len));
     dp(s,buf);
     ds(s,buf,0,soloresult);;

	 return result;
	 
    }
	void ds(const string &s,vector<vector<int>>& buf,int index,vector<string>& soloresult)
    {
     
      for(int i=index ; i<s.length();i++)
      {
        if(buf[index][i] == 1)
        {
            soloresult.push_back(s.substr(index,i-index +1));
			if(i == s.length()-1)
			{
                result.push_back(soloresult);
			}
			else
			{
                ds(s,buf,i+1,soloresult);
			}
			soloresult.pop_back();
		}


	  }
	}
	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

原文:http://www.cnblogs.com/xgcode/p/4394386.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!