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

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

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"]]

题目大意:给定一个字符串,将字符串分成多个子串使得每个子串都是回文的。返回所有可能的切分方式。

解题思路:本题需要穷举出所有符合条件的切割方法,组成集合并返回,需要使用dfs。首先需要一个辅助函数来判断每个子串是否是回文的,即该子串的前一半的字符是否跟后一半的字符呈镜面对称的。所以写了一个isPalindrome()函数。接下来是dfs函数部分,首先判断终止条件,终止条件应该是当字符串已经切割完了。即len(s)等于0的时候,则将当前子串添加到集合中去。接下来遍历各种可能切分子串的方式,如果切分出来的子串是回文的,则将该子串添加到当前集合中,并让剩余的字符串继续进行dfs。

class Solution(object):

  def partition(self, s):
    """
    :type s: str
    :rtype: List[List[str]]
    """
    A = []
    def isPalindrome(s):
      for i in range(len(s)/2+1):
        if s[i] != s[len(s)-1-i]:
          return False
      return True
    def dfs(s, List):
      if len(s) == 0:
        A.append(List)
      for i in range(1, len(s)+1):
        if isPalindrome(s[:i]):
          dfs(s[i:], List+[s[:i]])
    dfs(s, [])
    return A

 

转载于:https://www.cnblogs.com/fangdai/p/7124590.html

你可能感兴趣的文章
开发中的各种时间格式转换(一)
查看>>
iSCSI安全之密码认证
查看>>
MySQL运维命令大全
查看>>
MySQL分区表(优化)
查看>>
mysql慢日志分析工具之mysqlsla学习笔记
查看>>
nginx基本配置与参数说明
查看>>
修改防火墙
查看>>
thinkphp中取部分字段用法
查看>>
Linux系统虚拟机管理及redhat7.2的安装
查看>>
handsontable 和 echarts都定义了require方法,初始化时冲突了,怎么办?
查看>>
XP与XP互连
查看>>
ibatis对存储过程的调用
查看>>
接口与简单工厂模式
查看>>
linux驱动杂谈2
查看>>
使用linux内核,打造自己的linux
查看>>
xshell下常用的快捷键
查看>>
4、Ansible配置和使用
查看>>
Nginx--安装和配置
查看>>
网上邻居无法显示本地连接
查看>>
android:contentDescription的作用及使用方法
查看>>