LeetCode第131题—分隔回文串—Python实现_python 131leetcode-程序员宅基地

技术标签: 算法  python  回溯法  leetcode  回文串  LeetCode  


title: LeetCode No.131

categories:

  • OJ
  • LeetCode

tags:

  • Programing
  • LeetCode
  • OJ

LeetCode第131题—分隔回文串

昨天端午鸽了塞

自己代码的开源仓库:click here 欢迎Star和Fork

题目描述

给你一个字符串 s,请你将 s 分割成一些子串,使每个子串都是 回文串 。返回 s 所有可能的分割方案。

回文串 是正着读和反着读都一样的字符串。

示例 1:

输入:s = "aab"
输出:[["a","a","b"],["aa","b"]]
示例 2:

输入:s = "a"
输出:[["a"]]
 
提示:

1 <= s.length <= 16
s 仅由小写英文字母组成

代码

import copy
class Solution(object):
    res = []
    # fixme:判断是否是回文串
    def isPalindrome(self, s):
        if s == s[::-1]:
            return True
        return False

    def partition(self, s):
        """
        最终的结果,每个字符单独拿出来肯定是一个回文串, 因此不存在空字符串结果的情况,除非输入就是空串
        算法考虑的话,有两种方法:
            1. 动态规划
            2. 回溯法
        :type s: str
        :rtype: List[List[str]]
        """
        self.res = []
        # 回溯法
        def backtrack(s, path):
            if len(s) == 0:
                tt = copy.copy(path) # 如果直接用self.res.append(path)的话,由于是浅拷贝,后面再path.remove的话,res中的结果也会被修改
                self.res.append(tt)
            for i in range(1, len(s) + 1):  # 注意起始和结束位置
                if self.isPalindrome(s[:i]):
                    path.append(s[:i])
                    backtrack(s[i:], path)
                    path.remove(s[:i])
        backtrack(s,[])
        return self.res

if __name__ == '__main__':
    s = Solution()
    print(s.partition("a"))

更加推荐的写法

class Solution(object):
    # fixme:判断是否是回文串
    def isPalindrome(self, s):
        if s == s[::-1]:
            return True
        return False

    def partition(self, s):
        """
        最终的结果,每个字符单独拿出来肯定是一个回文串, 因此不存在空字符串结果的情况,除非输入就是空串
        算法考虑的话,有两种方法:
            1. 动态规划
            2. 回溯法
        :type s: str
        :rtype: List[List[str]]
        """
        res = []
        # 回溯法
        def backtrack(s, res, path):
            if not s:
                res.append(path)
                return
            for i in range(1, len(s) + 1):  # 注意起始和结束位置
                if self.isPalindrome(s[:i]):
                    backtrack(s[i:], res, path + [s[:i]])
        backtrack(s,res,[])
        return res
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/qq_16184125/article/details/117872540

智能推荐

AI芯片:华为昇腾(ASCEND)310结构分析_华为昇腾310芯片手册-程序员宅基地

文章浏览阅读1.6w次,点赞5次,收藏30次。华为的麒麟SOC中使用的是寒武纪的AI芯片模块。但是,华为自己也推出了自有的AI芯片架构。本文根据华为公布的信息,简单分析下其结构。所有信息都来自互联网,来自华为的官方信息。感谢华为的分享!!首先看看,华为发布的一张海报,如下图所示。整体采用华为自研的达芬奇架构,采用高性能的3D Cube计算引擎。因为兴趣及工作领域的因素,我更关注其芯片内部的AI 卷积核的设计。从海报中能够看出..._华为昇腾310芯片手册

unbuntu 16.04+cuda10.0 安装pytorch 1.4.0 +MMCV 1.3.3 + mmdetection 2.13.0 + mmsegmentation 0.14.0_mmcv版本和pytorch1.4.0-程序员宅基地

文章浏览阅读664次。环境ubuntu 16.04cuda 10.0python 3.8pytorch 1.4.0mmcv 1.3.3mmdetection 2.13.0mmsegmentation 0.14.0由于本机已经安装好,cuda 10.0 和 anaconda,所以这里不再赘述。如未安装,需要先进行安装!本文主要为了不升级cuda,而能够使用尽量新的版本,因此趟了很多坑,如果严格安装官网要求的条件进行安装,应该会极为顺利!对于cuda 10.0 + ubuntu的版本可以重点参考1.安装pytor_mmcv版本和pytorch1.4.0

区块链对人性的嘲讽:明知是老鼠窝,玩家仍砸百万入场“菠菜”应用_庞氏骗局 exit scam-程序员宅基地

文章浏览阅读3.5k次。 本文由公众号DappVision原创首发,转载请联系授权 据不完全统计,目前以太坊上运行着136个博彩类Dapp,其中,etheroll自今年2月上线以来,持续稳坐榜首。好景不长,近期一款名为Fomo3D的博彩Dapp上线不足一月就倒逼etheroll走下神坛,凭借远超第二名的日活喜登冠军宝座。更让人意外的是,自称是“老鼠窝”的Fomo3D,短短十来天,ETH入账过千,想来这背后..._庞氏骗局 exit scam

sqli-labs靶场第二十二关_sqlilabs第22-程序员宅基地

文章浏览阅读418次。第二十二关cookie编码注入!当我使用")编码后放入cookie中去请求发现报错了!说明很可能是")闭合的没注入成功,试一下 " , ’ , ‘)这几种情况吧 或不输入单引号和双引号把爱" and extractvalue(1,concat(’^’,(select database()),’^’)) --+ 注入失败" and extractvalue(1,concat(’^’,(select database()),’^’)) # 注入成功这里发现一个问题,在cookie注入时,使用–_sqlilabs第22

一次APM32替换STM32的经历分享_amp32-程序员宅基地

文章浏览阅读1.6w次,点赞55次,收藏101次。系列文章目录这几年相信大家知道STM32系列的芯片价格翻倍的涨,自己玩都快玩不起了,要是用于生产,这得多掏多少钱!所以现在大家都选择了国产芯片,哈哈不能说多差吧!价格你没得说。 这是我的一次APM32代替STM32的经历,你是不是也会遇到这样的坑呢?文章目录系列文章目录一、开始替换(流程)1.首先第一步找一个简单的工程,保证没有错误。警告没问题。2.寻找APM32芯片替换STM32芯片3.修改错误4.重点来了二、测试方法与结果1.测试2. SPI怎么测?总结一、开始替换(流程)&g_amp32

java中的进制转换及转换函数_java将八进制转五进制函数-程序员宅基地

文章浏览阅读4.4k次,点赞4次,收藏21次。Java的进制转换 进制转换原理 十进制 转二进制: 原理: 对十进制数进行除2 运算取余。 6 --> 110 二进制 转十进制 原理: 二进制 乘以 2 的n次幂 的过程 110 ->0*20 + 1*21 + 1 * 22 0 + 2 + 4=6 _java将八进制转五进制函数

随便推点

linux线程信号量 函数,linux C线程信号量(转)-程序员宅基地

文章浏览阅读110次。#include #include /* For O_CREAT constants */#include /* For sem_ constants */#include /* For pthread_create constants */void pthreadRun(void *arg);void pthreadStop(void *ar..._linux pthread_stop

Trimble MB-Two OEM GNSS板 参考手册(四)_trimble rtx收费-程序员宅基地

文章浏览阅读742次。第四章 Trimble RTX 校正服务简介Trimble RTX是一种技术,它利用来自全球跟踪站网络的实时数据以及创新的定位和压缩算法来计算和中继卫星轨道,卫星时钟以及对GNSS接收器的其他系统调整。这项突破性技术可提供卫星或IP交付的高精度GNSS定位,无需使用传统的基于参考站的基础设施。虽然标准自主GNSS定位提供的水平精度通常超过1米,但Trimble RTX可提供优于4厘米(..._trimble rtx收费

PostgreSQL数据库_pg数据库-程序员宅基地

文章浏览阅读1.4w次,点赞16次,收藏133次。PostgreSQL是一个免费的对象·关系型数据库服务器(ORDBMS),在灵活的BSD许可证下发行。PostgreSQL开发者把它念作post-gress-Q-L。PostgreSQL的Slogan是“世界上最先进的开源关系型数据库”。“开源界的Oracle”,去O首选。PostgreSQL官网:PosetgreSQL中文社区:全球数据库排行:国产数据库排行:命令说明\password设置当前密码\q退出\h查看sql命令的解释,如\h select?_pg数据库

java(十)【属性集,缓冲流、转换流、序列化流】_put(buffer,offset:0,len)-程序员宅基地

文章浏览阅读353次。day10【缓冲流、转换流、序列化流】今日目标IO资源的处理。finnally释放资源jdk 1.7开始的新技术 try-with-resources缓冲流提高字节流和字符流读写数据的性能的。转换流可以解决不同编码读取乱码的问题。序列化可以实现把Java对象存储到文件中去。打印流可以方便的写数据出去,支持写任意类型的数据到文件中去,非常方便和简单以及强大。属性集是一种Map集合。教学目标能够使用字节输入流读取数据到程序Input_put(buffer,offset:0,len)

《Three.js 开发指南》源码示例说明以及在线demo(原书第二版)附第三版的代码下载_threejs开发指南第三版 pdf-程序员宅基地

文章浏览阅读3.9k次,点赞4次,收藏33次。1. 用Three.js创建你的第一个三维场景1.1 具有所有基本元素的hello world示例src/chapter-01/06-screen-size-change.html2. 使用构建Three.js场景的基本组件2.1 添加、删除、枚举、通过名字获取场景中的对象src/chapter-02/01-basic-scene.html2.2 雾化效果src/chapter-02..._threejs开发指南第三版 pdf

开发语言的选择_开发语言应首选-程序员宅基地

文章浏览阅读5.7k次,点赞4次,收藏2次。在软件这个行业里,怕是没有任何一个其话题域像开发语言这样引起争议了。对开发语言是非的争论,不单旷日持久,且深度亦是与时俱进。实现要强调下的是,在这里我们要专注的是开发语言的选择而非开发语言的优劣。从不同的视角对开发语言进行选择,其结论可能大相径庭。从项目的角度看,语言自身特性的多少,强弱往往并不成为一个关键选择因素。好比说某语言支持多重继承,而某语言不支持多重继承,但对大多项目而言多重继承这一语言_开发语言应首选

推荐文章

热门文章

相关标签