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

    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

  • 相关阅读:
    Django ——Timezone 处理
    orm
    MySql系列之初识
    python并发编程之IO模型
    并发编程之协程
    GIL解释锁及进程池和线程池
    线程的互斥锁、递归锁及信号量
    守护、互斥锁、IPC和生产者消费者模型
    并发编程基础(进程)
    网络编程
  • 原文地址:https://www.cnblogs.com/LilyLiya/p/14887873.html
Copyright © 2011-2022 走看看