• 困难
  • 中等
  • 简单

    题目描述

    给定一个字符串 s,将 s 分割成一些子串,使每个子串都是回文串。
    返回 s 所有可能的分割方案。

返回滑动窗口中的最大值。

来源,leetcode 每日一题 131. 分割回文串

示例:

  1. 输入: "aab"
  2. 输出:
  3. [
  4. ["aa","b"],
  5. ["a","a","b"]
  6. ]

解题思路

  1. dfs

    代码

    1. class Solution {
    2. public:
    3. vector<vector<string>> partition(string s) {
    4. vector<vector<string>> results;
    5. vector<string> temp;
    6. int size = s.length();
    7. if (size == 0) {
    8. return {};
    9. }
    10. dfs(s, temp, results, size, 0);
    11. return results;
    12. }
    13. void dfs(string& s, vector<string>& temp, vector<vector<string>>& results, int& size, int start) {
    14. if (start == size) {
    15. results.push_back(temp);
    16. return;
    17. }
    18. // for (auto& item: temp) {
    19. // cout << item << " ";
    20. // }
    21. // cout << endl;
    22. for (int i = start; i < size; i++) {
    23. if (isPalindom(s, start, i)) {
    24. temp.push_back(s.substr(start, i-start + 1));
    25. dfs(s, temp, results, size, i + 1);
    26. temp.pop_back();
    27. }
    28. }
    29. }
    30. bool isPalindom(string& s, int left, int right) {
    31. for (int i = 0; i <= right-left; i++) {
    32. if (left + i > right-i) {
    33. break;
    34. } else if (s[left+i] != s[right-i]) {
    35. return false;
    36. }
    37. }
    38. return true;
    39. }
    40. };