LeetCode之Palindrome Partitioning

来源:互联网 发布:黑暗之魂 知乎 编辑:程序博客网 时间:2024/04/29 00:37

Palindrome PartitioningFeb 282099 / 7369

Given a string s, partition s such that every substring of the partition is a palindrome.

Return all possible palindrome partitioning of s.

For example, given s = "aab",
Return

  [    ["aa","b"],    ["a","a","b"]  ]

Run Status: Accepted!
Program Runtime: 4 milli secs


class Solution {    

private:

//判断从start位置开始到end位置结束,s的字串是否为回文

        bool ispalindrome(const string s,int start, int end)
        {
            // int len = s.length();
             int i=start, j= end;
             while(i<j)
             {
                       if(s[i] != s[j])
                               return false;
                        i++;
                        j--;          
             }     
             
             return true;
        }


public:
    vector<vector<string> > partition(string s) {
        // Start typing your C/C++ solution below
        // DO NOT write int main() function
        
        vector<vector<string> > result;
        vector<string> tmp;
        

        int len = s.length();


   //i代表子串长度,位置从0开始
            for(int i=len; i>0; i--)
            {
                if(ispalindrome(s, 0, i-1))
                {
                      //s本身是回文,则将s入栈
                      if(i == len)
                      {
                           tmp.push_back(s.substr(0, i));
                           result.push_back(tmp);     
                           tmp.clear();
                      }
                      else{
                           vector<vector<string> > p = partition(s.substr(i, len - i));
                           vector<vector<string> >::iterator it = p.begin();
                           while(it != p.end())
                           {
                               vector<string>::iterator iq = (*it).begin();
                               tmp.push_back(s.substr(0, i));
                               while(iq!=(*it).end())
                               {
                                   tmp.push_back(*iq);
                                   iq++;                     
                               }
                               result.push_back(tmp); 
                               tmp.clear();
                               it++;
                           }       
                      }           
                }     
            }
        return result;

    }

};

原创粉丝点击