zoukankan      html  css  js  c++  java
  • 最小回文分割 | DFS生成回文

    题目描述
    给出一个字符串s,分割s使得分割出的每一个子串都是回文串
    计算将字符串s分割成回文分割结果的最小切割数
    例如:给定字符串s="aab",
    返回1,因为回文分割结果["aa","b"]是切割一次生成的。
    示例1
    输入
    复制
    "aab"
    返回值
    复制
    1

    
    class Solution {
    public:
        /**
         * 
         * @param s string字符串 
         * @return int整型
         */
        int minCut(string s) {
            int n = s.size();
            if (n<=1) return 0;
           
            int dp[n+1];
            memset(dp,0x3f,sizeof dp);
            dp[0]=-1;
            for(int i=0;i<n;++i) {
                for(int len=0;i-len>=0 && i+len<n && s[i-len]==s[i+len];++len) {
                    dp[i+len+1] = min(dp[i+len+1],dp[i-len]+1);
                }
                for(int len=0;i-len>=0 && i+len+1<n&& s[i-len]==s[i+len+1]; ++len) {
                    dp[i+len+2] = min(dp[i+len+2],dp[i-len]+1);
                }
            }
            return dp[n];
        }
        bool isPalid(string &s,int i,int j) {
            while(i<j) if(s[i++]!=s[j--]) return false;
            return true;
        }
    };
    
    
    

    题目描述
    给定一个字符串s,分割s使得s的每一个子串都是回文串
    返回所有的回文分割结果。(注意:返回结果的顺序需要和输入字符串中的字母顺序一致。)
    示例1
    输入
    复制
    "dde"
    返回值
    复制
    [["d","d","e"],["dd","e"]]

    
    
    
    class Solution {
    public:
        /**
         * 
         * @param s string字符串 
         * @return string字符串vector<vector<>>
         */
        vector<vector<string> > partition(string s) {
            // write code here
            vector<vector<string>> res;
            vector<string> cur;
            dfs(res,cur,s);
            return res;
            
            
        }
        void dfs(vector<vector<string>> &res,vector<string>&cur,string& s) {
            if(s.size()<1) {
                res.push_back(cur);
                return;
            }
            for(int len=1;len<=s.size();++len) {
                string sub = s.substr(0,len);
                if(isPali(sub,0,len-1)) {
                    cur.push_back(sub);
                    string p = s.substr(len);
                    dfs(res,cur,p);
                    cur.pop_back();
                }
            }
        }
        
        
        bool isPali(string&s,int l,int r) {
            if(l==r) return true;
            while(l<r )if(s[l++]!=s[r--]) return false;
            return true;
        }
    };
    
    
  • 相关阅读:
    Python方法
    Cpp求PI
    Asp.net身份验证和授权
    [转] 魔兽系列事件报道
    directxsdk aug 2006
    [转]转变的开始!NVIDIA更换新Logo
    wxWidgets 2.7.0 released
    OpenGL 和 Vista(续)
    暴雪员工的跳槽纪录
    3D版的星际争霸
  • 原文地址:https://www.cnblogs.com/lyr-2000/p/14324592.html
Copyright © 2011-2022 走看看