zoukankan      html  css  js  c++  java
  • [LeetCode]题解(python):131-Palindrome Partitioning

    题目来源:

      https://leetcode.com/problems/palindrome-partitioning/


    题意分析:

      给定一个字符串s,将s拆成若干个子字符串,使得所有的子字符串都是回文字符串,返回所有这样的子字符串集合。比如s = “aab”,那么返回[["aa","b"],["a","a","b"]]。


    题目思路:

      这是一个动态规划问题,如果s[:i]是回文字符串,那么s[:i] X solve(s[i+1:]),(X是笛卡尔乘积,solve(s[i+1:])是s[i+1:]的答案)。所以只需要判断s[:i]是不是回文就可以了。


    代码(python):

     1 class Solution(object):
     2     def partition(self, s):
     3         """
     4         :type s: str
     5         :rtype: List[List[str]]
     6         """
     7         m = len(s)
     8         if m == 0:
     9             return []
    10         def isp(i,j):
    11             while i < j:
    12                 if s[i] != s[j]:
    13                     return False
    14                 i += 1
    15                 j -= 1
    16             return True
    17         def solve(i):
    18             ans = []
    19             if i == m - 1:
    20                 return [[s[i]]]
    21             j = i
    22             while j < m:
    23                 if isp(i,j):
    24                     tmp = solve(j + 1)
    25                     if len(tmp) == 0:
    26                         ans.append([s[i:j + 1]])
    27                     else:
    28                         for k in tmp:
    29                             ans.append([s[i:j + 1]] + k)
    30                 j += 1
    31             return ans
    32         return solve(0)
    33                     
    34                     
    View Code
  • 相关阅读:
    Python3之format
    xml文件整理
    某系统采集2018
    sublime+python3 中文环境
    python3文本读取与写入常用代码
    redis3.0集群使用发现的一些问题
    mysql字符集
    redis3.0集群搭建
    安装Maven、nexus
    一键安装mysql5.6
  • 原文地址:https://www.cnblogs.com/chruny/p/5330635.html
Copyright © 2011-2022 走看看