zoukankan      html  css  js  c++  java
  • Longest Palindromic Substring 解答

    Question

    Given a string S, find the longest palindromic substring in S. You may assume that the maximum length of S is 1000, and there exists one unique longest palindromic substring.

    Solution

    Palindrome类型的题目的关键都是这个递推表达式:

    dp[i][j] = (s[i] == s[j]) && dp[i + 1][j - 1]

    逆向思维,于是我们想到由 dp[i][j] 可以推出以下:

    dp[i - 1][j + 1], dp[i - 2][j + 2], dp[i - 3][j + 3]...

    这题的一个思路是用DP构造2D Array,参见 Palindrome Subarray

    另一个思路也是借助了DP的思想,时间复杂度仍是O(n2),但是空间复杂度是O(1)

    我们对于每个起点遍历,找以 1. 它为中心的最长对称子序列 2. (如果它和它的邻居相等)它和它的邻居为中心的最长对称子序列

    代码如下

     1 class Solution(object):
     2     def spand(self, s, start, end):
     3         length = len(s)
     4         while start >= 0 and end < length:
     5             if s[start] == s[end]:
     6                 start -= 1
     7                 end += 1
     8             else:
     9                 break
    10         return s[start + 1: end]
    11     
    12     def longestPalindrome(self, s):
    13         """
    14         :type s: str
    15         :rtype: str
    16         """
    17         length = len(s)
    18         result = s[0]
    19         for i in range(length - 1):
    20             # sub-length is odd 
    21             result1 = self.spand(s, i, i)
    22             if len(result) < len(result1):
    23                 result = result1
    24             # sub-length is even
    25             if s[i] == s[i + 1]:
    26                 result2 = self.spand(s, i, i + 1)
    27                 if len(result) < len(result2):
    28                     result = result2
    29         return result
  • 相关阅读:
    iOS开发-文件管理
    MagicalRecord
    NSPredicate的
    Objective-C文件和目录操作,IOS文件操作,NSFileManager使用文件操作
    iOS 开发者必不可少的 75 个工具
    UITableView 删除cell
    手势
    随机数
    PPT2016同时播放多个视频
    MATLAB运行时,弹出图片框影响电脑使用
  • 原文地址:https://www.cnblogs.com/ireneyanglan/p/4934877.html
Copyright © 2011-2022 走看看