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
  • 相关阅读:
    Java流关闭总结
    Too many open files 问题
    oracle数据库表被锁的解锁方法
    中文转换成字节数组
    java接口理解
    最小的K个数
    数组中出现次数超过一半的数字
    复杂链表的复制
    二叉树中和为某一值的路径
    二叉搜索树的后序遍历序列
  • 原文地址:https://www.cnblogs.com/chruny/p/5330635.html
Copyright © 2011-2022 走看看