首页 > 其他 > 详细

Longest Palindromic Substring

时间:2021-06-16 10:19:01      阅读:12      评论:0      收藏:0      [点我收藏+]

refer to: https://www.algoexpert.io/questions/Longest%20Palindromic%20Substring

Problem Statement

技术分享图片

Analysis

穷举法

技术分享图片

Code

def longestPalindromicSubstring(string):
    longest = ""
    for i in range(len(string)):
        for j in range(i, len(string)):
            substring = string[i:j+1]
            if len(substring) > len(longest) and isPalindrome(substring):
                longest = substring
    return longest

def isPalindrome(string):
    leftIdx = 0
    rightIdx = len(string) - 1
    while leftIdx < rightIdx:
        if string[leftIdx] != string[rightIdx]:
            return False
        leftIdx += 1
        rightIdx -= 1
    return True

Time complexity

O(n^ 3)-> embed for loops, O(n) for the isPalindrome function

extension to left and right direction method

技术分享图片

Code

def longestPalindromicSubstring(string):
    currentLongest = [0,1]
    for i in range(1, len(string)):# traverse every index, and apply getLongestPalindromeFrom function
        odd = getLongestPalindromeFrom(string, i - 1, i + 1)
        even = getLongestPalindromeFrom(string, i - 1, i)
        longest = max(odd, even, key = lambda x: x[1] - x[0]) # use lambda to track the length of palindrome substrings
        currentLongest = max(longest, currentLongest, key = lambda x: x[1] - x[0])
    return string[currentLongest[0] : currentLongest[1]]
        
    
def getLongestPalindromeFrom(string, leftIdx, rightIdx): #check from center to both left and right direction
    while leftIdx >= 0 and rightIdx < len(string):
        if string[leftIdx] != string[rightIdx]:
            break
        leftIdx -= 1
        rightIdx += 1
    return [leftIdx + 1, rightIdx]

Time complexity

技术分享图片

Longest Palindromic Substring

原文:https://www.cnblogs.com/LilyLiya/p/14887873.html

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