首页 > 其他 > 详细

leetCode 131 Palindrome Partitioning 分割回文串

时间:2020-12-21 23:29:54      阅读:36      评论:0      收藏:0      [点我收藏+]
Palindrome Partitioning

分割回文串

题目

技术分享图片

题意

给你一个字符串,将该字符串划分为若干个子字符串,若这些子字符串都为回文串,则输出这一组子字符串

分析

因为要进行划分,切要输出具体子字符串,故dp不适合该题

考虑到字符串的最大长度为16,对其子字符串组的划分共有\(C_{15}^{1}+C_{15}^2+....+C_{15}^{15}\) 相当于往字符串的15个空中插入若干个分割符, 根据**二项式定理 **共有\(2^{15}-1\) 种划分

这个数量是在可接受范围内的,因此我们可以通过暴力枚举的方式进行解决

我们采取dfs搜索的方法,每次搜索时都会把剩余的序列进行划分,判断序列是否为回文

具体代码如下

class Solution {
public:
    
    vector<vector<string>> ans;
    
    bool test(string &s,int Start,int End){
       
        int n=(End-Start);
        for(int i=0;i<n/2;i++){
            if(s[Start+i]!=s[Start+n-i-1]){
                return false;
            }
        }
        return true;
    }
    
    void dfs(string& s,int k,vector<string> & tmp){
        if(k==s.size()){
            ans.push_back(tmp);
            return ;
        }
        for(int i=k+1;i<=s.size();i++){
            if(test(s,k,i)){ //子数组为回文
                tmp.push_back(s.substr(k,i-k));
                //cout<<s.substr(k,i-k)<<endl;
                dfs(s,i,tmp);
                if(!tmp.empty())
                tmp.pop_back();
            }
        }
        return ;
            
    }
    
    vector<vector<string>> partition(string s) { 
        vector<string> tmp;
        dfs(s,0,tmp);
        return ans;        
    }
};

leetCode 131 Palindrome Partitioning 分割回文串

原文:https://www.cnblogs.com/bean-boom/p/14170181.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!