【Leetcode】131. Palindrome Partitioning(回文字符串分区)

我会带着你远行 2022-04-24 15:22 251阅读 0赞

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

Return all possible palindrome partitioning of s.

Example:

  1. Input: "aab"
  2. Output:
  3. [
  4. ["aa","b"],
  5. ["a","a","b"]
  6. ]

题目大意:

对给出的字符串,找出回文字符串的所有组合的方式。

解题思路:

DFS即可,每次开始位置为上一个回文字符串的结束位置。

  1. class Solution {
  2. public:
  3. vector<vector<string>> partition(string s) {
  4. vector<vector<string>> ans;
  5. vector<string> tmp;
  6. helper(s, 0, ans, tmp);
  7. return ans;
  8. }
  9. void helper(string s, int begin, vector<vector<string> >& ans, vector<string >& tmp){
  10. if(begin==s.size()){
  11. ans.push_back(tmp);
  12. return;
  13. }
  14. for(int i=begin; i < s.size();i++){
  15. string cor_s = s.substr(begin, i-begin+1);
  16. if(valid(cor_s)){
  17. // cout << cor_s << endl;
  18. tmp.push_back(cor_s);
  19. helper(s, i+1, ans, tmp);
  20. tmp.pop_back();
  21. }
  22. }
  23. }
  24. bool valid(string s){
  25. for(int i =0;i<int(s.size()/2);i++){
  26. if(s[i]!=s[s.size()-1-i]) return false;
  27. }
  28. return true;
  29. }
  30. };

发表评论

表情:
评论列表 (有 0 条评论,251人围观)

还没有评论,来说两句吧...

相关阅读