【leetcode】Palindrome Partitioning

來源:互聯網
上載者:User

Question:

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"]  ]

Anwser 1 :      

class Solution {public:    vector<vector<string>> partition(string s) {        // Start typing your C/C++ solution below        // DO NOT write int main() function        vector<vector<string>> ret;        if(s.length() == 0)            return ret;                    vector<int> vec;        vec.push_back(-1);                part(s, 0, ret, vec);        return ret;    }    void part(string s, int i, vector<vector<string>> &ret, vector<int> &vec) {        if(i == s.length()){            vector<string> v;            int len = vec.size();            for(int k = 0; k < len-1; k++)                   v.push_back(s.substr(vec[k]+1, vec[k+1] - vec[k]));            ret.push_back(v);            return;        }        for(int j = i; j < s.length(); j++) {            if(isPalindrome(s, i, j)) {                vec.push_back(j);                part(s, j+1, ret, vec);                vec.pop_back();                }        }    }    bool isPalindrome(string &s, int i, int j)    {        while(i < j)        {            if(s[i++] != s[j--])                return false;        }        return true;      }};

Anwser 2 :      

class Solution {public:    vector<vector<string>> partition(string s) {        // Start typing your C/C++ solution below        // DO NOT write int main() functionint len=s.length();int BIG=2*len;int num_line=len+1;vector<int> vec(num_line*num_line);        for(int l=1; l<=len; l++)//兩個木板之間有多少個字元{for (int i=0; i+l<num_line; i++)//從第0個木板開始,i+l為木板的序號{if (l==1){vec[i*num_line+(i+l)]=1;}else if(l==2){if (s[i]==s[i+l-1])vec[i*num_line+(i+l)]=1;elsevec[i*num_line+(i+l)]=BIG;}else{if (s[i]==s[i+l-1])vec[i*num_line+(i+l)] = vec[(i+1)*num_line+(i+l-1)];elsevec[i*num_line+(i+l)]=BIG;}}}vector<vector<int>> index;vector<int> start;start.push_back(0);index.push_back(start);for (int i=0;i<num_line;i++){int max_len=index.size();vector<vector<int>>::iterator iter=index.begin();for(int j=0;j<max_len;j++){vector<int> current_line=index[j];if (current_line.back()>=num_line-1) continue;bool first_time=true;for(int a=current_line.back()+1;a<num_line;a++){if(vec[current_line.back()*num_line+a]==1){if (first_time){index[j].push_back(a);first_time=false;}else{vector<int> tmp=current_line;tmp.push_back(a);index.insert(index.begin()+j,tmp);j++;max_len++;}}}}}vector<vector<string>> res;for(int i=0;i<index.size();i++){vector<string> tmp;res.push_back(tmp);for(int j=0;j<index[i].size()-1;j++){res[i].push_back(s.substr(index[i][j],index[i][j+1]-index[i][j]));}}return res;    }};

參考推薦:

leetcode:Palindrome Partitioning

Palindrome Partitioning

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.