博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Palindrome Partitioning
阅读量:5925 次
发布时间:2019-06-19

本文共 1327 字,大约阅读时间需要 4 分钟。

Given a string s, partition s such that every substring of the partition is a palindrome.

Return all possible palindrome partitioning of s.

For example, given s = "aab",

Return

[  ["aa","b"],  ["a","a","b"]]

又是一道回文的题目,回文系列有非常多的题目,主要是DP+search的思路。这题也是。

先用DP求一个是否回文的状态矩阵,之后根据这个状态矩阵做dfs+backtracking;当然也可以一边DP,一边组织结果,针对结尾位置保存一个数组,每次可以针对当前回文字符加上之前那个位置有的所有组合做一个组合()。

我的代码如下:

class Solution(object):    def partition(self, s):        """        :type s: str        :rtype: List[List[str]]        """        #first find the 2 dimension dp state        #then search and backtracking to generate result.        #dp order is very important        dp = [[False]*len(s) for i in xrange(len(s))]        for i in xrange(len(s)-1, -1, -1): #start            for j in xrange(i, len(s)):    #end                if s[i] == s[j] and (i+1>j-1 or dp[i+1][j-1] == True): #核心判断语句                    dp[i][j] = True        res = []        self.helper(res, [], 0, dp, s)        return res    def helper(self, res, cur, index, dp, s):        if index == len(s):            res.append(cur+[])            return         for i in xrange(index, len(s)):            if dp[index][i] == True:                cur.append(s[index:i+1])                self.helper(res, cur, i+1, dp, s)                cur.pop()

 

转载于:https://www.cnblogs.com/sherylwang/p/5837836.html

你可能感兴趣的文章
测试人员必学的软件快速测试方法(二)
查看>>
Agora iOS SDK-快速入门
查看>>
引入间接隔离变化(三)
查看>>
统一沟通-技巧-4-让国内域名提供商“提供”SRV记录
查看>>
cocos2d-x 3.0事件机制及用户输入
查看>>
比亚迪速锐F3专用夏季座套 夏天坐垫 四季坐套
查看>>
C++ 数字转换为string类型
查看>>
程序员全国不同地区,微信(面试 招聘)群。
查看>>
【干货】界面控件DevExtreme视频教程大汇总!
查看>>
闭包 !if(){}.call()
查看>>
python MySQLdb安装和使用
查看>>
Java小细节
查看>>
poj - 1860 Currency Exchange
查看>>
chgrp命令
查看>>
Java集合框架GS Collections具体解释
查看>>
洛谷 P2486 BZOJ 2243 [SDOI2011]染色
查看>>
linux 笔记本的温度提示
查看>>
(转)DOTA新版地图6.78发布:大幅改动 增两位新英雄
查看>>
数值积分中的辛普森方法及其误差估计
查看>>
Web service (一) 原理和项目开发实战
查看>>