zoukankan      html  css  js  c++  java
  • [leetcode] 5.Longest Palindromic Substring-1

    开始觉得挺简单的 写完发现这个时间超限了:

    class Solution:
        def longestPalindrome(self, s: str) -> str:
            # longest palindromic substring lenth < 1000
            #NULL
            string = s
            if len(string) == 0:
                return ''
            # ---
            # regular
            # a not empty string must have 1 letterd palindromic substring:string[0]
            longestPalindSubStringLength = 1
            longestPalindSubString = string[0]
            for start in range(len(string)):
                for end in range(start + 1, len(string) +1): #[] operator is right open interval,will not count "end" if no +1
                    # one letter
                    if len(string[start:end]) == 1:
                        continue
                    if (self.isPalind(string[start:end])):
                        if len(string[start:end]) > longestPalindSubStringLength:# > will get bab ;>= will get aba. I prefer simple one
                            longestPalindSubStringLength = len(string[start:end])
                            longestPalindSubString = string[start:end]
            return longestPalindSubString
    
        def isPalind(self, substring: str) -> bool:
            #notice substring >= 2
            substringlength = len(substring)
    
            looplimit = substringlength // 2
            for index in range(0, looplimit):
                if substring[index] != substring[substringlength-1 -index]: # axisymmetric
                    return False
                else:
                    pass
            # run to here without return mean palindromic
            return True
    "abababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababa"

    用pycharm跑了下 要4秒,结果就是它自己。[testcase:85]

    发现之前判断轴对称的方法太低级了 不用逐位判断 轴对称的前一半和后一半的逆序是同一字符串即可。

    class Solution:
        def longestPalindrome(self, s: str) -> str:
            # longest palindromic substring lenth < 1000
            #NULL
            string = s
            if len(string) == 0:
                return ''
            # ---
            # regular
            # a not empty string must have 1 letterd palindromic substring:string[0]
            longestPalindSubStringLength = 1
            longestPalindSubString = string[0]
            for start in range(len(string)):
                for end in range(start + 1, len(string) +1): #[] operator is right open interval,will not count "end" if no +1
                    # one letter
                    if len(string[start:end]) == 1:
                        continue
                    if (self.isPalind(string[start:end])):
                        if len(string[start:end]) > longestPalindSubStringLength: #> mean bab;>= mean aba
                            longestPalindSubStringLength = len(string[start:end])
                            longestPalindSubString = string[start:end]
            return longestPalindSubString
    
        def isPalind(self, substring: str) -> bool:
            #notice substring >= 2
            substringlength = len(substring)
    
            if(substringlength %2)  == 1:
                #odd
                temp1 = substring[0:substringlength // 2 +1]
                temp2 = substring[substringlength:substringlength // 2 - 1:-1]
                if temp1 == temp2:
                    return True
                else:
                    return False
            else:
                #even
                temp1 = substring[0:substringlength//2]
                temp2 = substring[substringlength:substringlength//2 -1:-1]
                if temp1 == temp2:
                    return True
                else:
                    return False

    testcase:95

    "ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggg"

    f比g多一个

    testcase:98

    0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
        def longestPalindrome(self, s: str) -> str:
            # longest palindromic substring lenth < 1000
            # NULL
            if len(s) == 0:
                return ''
            # ---
            # regular
            # a not empty string must have 1 letterd palindromic substring:string[0]
            longestPalindSubStringLength = 1
            longestPalindSubString = s[0]
            for start in range(len(s)):
                for end in range(start + 1, len(s) + 1):  # [] operator is right open interval,will not count "end" if no +1
                                                            # left to right for end in range(start + 1, len(s) + 1)
                                                            #from right to left range(length -1,-)
                    # one letter
                    if len(s[start:end]) == 1 or len(s[start:end]) <= longestPalindSubStringLength:
                        continue
                    if (self.isPalind(s[start:end])):
                        if len(s[start:end]) > longestPalindSubStringLength:
                            longestPalindSubStringLength = len(s[start:end])
                            longestPalindSubString = s[start:end]
            return longestPalindSubString
    
        def isPalind(self, substring: str) -> bool:
            # notice substring >= 2
            substringlength = len(substring)
    
            if (substringlength % 2) == 1:
                # odd
                temp1 = substring[0:substringlength // 2 + 1]
                temp2 = substring[substringlength:substringlength // 2 - 1:-1]
                if temp1 == temp2:
                    return True
                else:
                    return False
            else:
                # even
                temp1 = substring[0:substringlength // 2]
                temp2 = substring[substringlength:substringlength // 2 - 1:-1]
                if temp1 == temp2:
                    return True
                else:
                    return False

    单个testcase耗时从500ms降到了200ms 但是总是到100/108的时候报TLE,换方法,下篇再说。

  • 相关阅读:
    取得窗口大小和窗口位置兼容所有浏览器的js代码
    一个简单易用的导出Excel类
    如何快速启动chrome插件
    网页表单设计案例
    Ubuntu下的打包解包
    The source file is different from when the module was built. Would you like the debugger to use it anyway?
    FFisher分布
    kalman filter
    Group delay Matlab simulate
    24位位图格式解析
  • 原文地址:https://www.cnblogs.com/alfredsun/p/10777340.html
Copyright © 2011-2022 走看看