• LeetCode 算法题之PalindromePartition


    一个string对象,将其进行划分成若干子字符串,要求每一字符串都是回文的(即正着读和倒着读是一样的)。设计一个算法,返回所有可能的字符串。

    初步分析这个问题,要对每一个自字符串再次划分,所以非常适合递归。算法如下:

    class Solution {
    public:
        vector<vector<string>> partition(string s) {
            vector<vector<string>>result;
            if(s=="")
            return result;
            result=part(s);
    
            return result;
        }
    private:
        vector<vector<string>> part(string s)
        {
            vector<vector<string>>result;
            int length=s.size();
            vector<string> single;
            for(int index=0;index<length;index++)
            {
                single.push_back(s.substr(index,1));
            }
            result.push_back(single);
    
            for(int index=0;index<length;index++)//注意index=0;要从单个字符做起,因为单个字符也是回文的;我最开始把单个字符的情况单独列出,这样是不妥的
            {
                if(s[index]==s[0]&&isPalindrome(s.substr(0,index+1)))//如果s[index]!=s[0],可以确定0到index的字符串不是回文的
                {
                    string lResult=s.substr(0,index+1);
                    if(index!=length-1)
                    {
                        vector<vector<string>> rResult=part(s.substr(index+1,length-index));
                        int rLen=rResult.size();
                        for(int rIndex=0;rIndex<rLen;rIndex++)
                        {
                            vector<string> result1;
                            result1.push_back(lResult);
                            for(int rIndex2=0;rIndex2<rResult[rIndex].size();rIndex2++)
                            {
                                result1.push_back(rResult[rIndex][rIndex2]);
                            }
                            result.push_back(result1);
                        }
                    }
                    else
                    {
                        vector<string> result1;
                        result1.push_back(lResult);
                        result.push_back(result1);
                    }
                }
            }
            return result;
        }
        bool isPalindrome(string s)
        {
            for(int start=0,end=s.size()-1;start<end;start++,end--)
            {
                if(s[start]!=s[end])
                {
                    return false;
                }
            }
            return true;
        }
    };
  • 相关阅读:
    【洛谷4836】Toy Train 玩具火车(博弈)
    Zabbix Scheduled reports中文乱码
    Openlayers 卷帘地图
    uniapp 使用 uniupgradecenter
    postgresql存储转义字符
    Docker(十一): 安装zookeeper
    Docker(十): 安装Jenkins
    home ftp server使用方法 Dawa
    ImportError: cannot import name 'HTTPClientFactory' from 'twisted.web.client' (unknown location)
    Python 绝对路径与相对路径
  • 原文地址:https://www.cnblogs.com/clark-lee/p/3538446.html
Copyright © 2020-2023  润新知