Longest Palindromic Substring
Total Accepted: 71879 Total Submissions: 343504 Difficulty: Medium
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.
Code:
class Solution(object): def longestPalindrome(self, s): """ :type s: str :rtype: str """ if len(s) == 0: return "" start = 0 max_len = 1 for i in xrange(len(s)): if i-max_len-1 >=0 and s[i-max_len-1:i+1] == s[i-max_len-1:i+1][::-1]: start = i - max_len - 1 max_len = max_len + 2 continue if i-max_len >=0 and s[i-max_len:i+1] == s[i-max_len:i+1][::-1]: start = i - max_len max_len = max_len + 1 return s[start:start+max_len]
Idea:
The optimal solution is O(N^2) time complex. So nothing very special. You traverse every position in `s`. You always compare if s[i-max_len-1:i+1] reads same as s[i-max_len-1:i+1][::-1]. See the picture below.
We first test whether s[i-max_len-1:i+1]
is palindrome then s[i-max_len:i+1]
because the next palindrome can possibly be longer than the previous palindrome by at most 2 characters.
Reference:
https://leetcode.com/discuss/21332/python-o-n-2-method-with-some-optimization-88ms