• LeetCode 131. Palindrome Partitioning 20170706


    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

  • 相关阅读:
    Class:向传统类模式转变的构造函数
    连载:面向对象葵花宝典:思想、技巧与实践(34)
    Java Web文件下载
    POJ 1469(裸二分匹配)
    查看程序占用tomcat内存情况
    《对象程序设计》课程 课程设计、考试安排 及 教师建议(2014.06.30修正)
    zoj 1880
    STM8S PWM 应用 呼吸灯
    Android开发系列(二十四):Notification的功能与使用方法
    HDU 4499 Cannon (暴力搜索)
  • 原文地址:https://www.cnblogs.com/fangdai/p/7124590.html
Copyright © 2020-2023  润新知