首页 > 其他 > 详细

Longest Palindromic Substring 解答

时间:2015-11-04 01:54:49      阅读:265      评论:0      收藏:0      [点我收藏+]

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

 

Longest Palindromic Substring 解答

原文:http://www.cnblogs.com/ireneyanglan/p/4934877.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!