[leetcode] 131. Palindrome Partitioning 解题报告

来源:互联网 发布:模板支撑计算软件 编辑:程序博客网 时间:2024/05/18 18:17

题目链接:  https://leetcode.com/problems/palindrome-partitioning/

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


思路:DFS递归搜索每个可能的子串,即每个子串长度可能为[1, length], 取一个长度为k的子串,判断其是否为回文数,分两种情况讨论:

1. 如果当前子串是回文数,将当前子串保存到数组里,然后剩下的字符作为原始字符串继续递归重复此操作,直到字符串剩余长度为0,将当前的一个解决方案保存起来

2. 如果不是回文数,k长度加1继续进行判断

代码如下:

class Solution {public:    void DFS(string s, int k, vector<string> vec)    {        if(k == s.size()) return ans.push_back(vec);        for(int i = 1, j; i <= s.size()-k; i++)        {            string sub = s.substr(k, i);            for(j =0; j < i/2; j++) if(sub[j]!=sub[i-1-j]) break;            if(j < i/2) continue;            vec.push_back(sub);            DFS(s, k+i, vec);            vec.pop_back();        }    }        vector<vector<string>> partition(string s) {        if(s.size()==0) return {};        DFS(s, 0, vector<string>{});        return ans;    }private:    vector<vector<string>> ans;};


0 0
原创粉丝点击