zoukankan      html  css  js  c++  java
  • LeetCode OJ--Palindrome Partitioning **

    https://oj.leetcode.com/problems/palindrome-partitioning/

    给定一个字符串 s,求所有的子串组合,每个子串都是回文的。

    比如,aba: {a,b,a},{aba}

    对于这类问题(对一个串的划分)基本上就是用递归。

    首先设一个 record 数组,记录中间结果,省的多次计算。

    class Solution {
    public:
        vector<vector<string> > partition(string s) {
            vector<vector<string> > ans;
            if(s.empty())
                return ans;
            const size_t len = s.size();
    
            vector<vector<bool> > flag;
            flag.resize(len);
            for(int i = 0;i<len;i++)
                flag[i].resize(len);
    
            for(int i = 0;i<len;i++)
                for(int j = i;j<len;j++)
                {
                    flag[i][j] = isPal(s,i,j);
                }
    
            vector<string> ansPiece;
            sub(0,flag,ans,ansPiece,s);
            return ans;
        }
        void sub(int begin,vector<vector<bool> > &flag,vector<vector<string> > &ans,vector<string> &ansPiece,string &s)
        {
            if(begin == s.size())
            {
                vector<string> _ansPiece = ansPiece;
                ans.push_back(_ansPiece);
                return ;
            }

    //here i means end position
    for(int i = begin;i<flag.size();i++) { string tempstr; if(flag[begin][i]) { tempstr = s.substr(begin,i-begin+1); ansPiece.push_back(tempstr); sub(i+1,flag,ans,ansPiece,s); ansPiece.pop_back(); } } } bool isPal(string s,int i,int j) { if(i==j) return true; int temp = 0; while(i+temp<j-temp) { if(s[i+temp]!=s[j-temp]) return false; temp++; } return true; } };
  • 相关阅读:
    linux sed的使用
    linux 服务的操作
    Js apply方法详解,及其apply()方法的妙用
    call()方法和apply()方法
    javascript中的深拷贝和浅拷贝
    移动web适配利器-rem
    js 函数讲解
    try…catch 结构
    Git使用之(pathspec master did not match any file(s) known to git)
    微信小程序使用函数的三种方法
  • 原文地址:https://www.cnblogs.com/qingcheng/p/3823084.html
Copyright © 2011-2022 走看看