• [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,换方法,下篇再说。

  • 相关阅读:
    TabActivity 、fragemnt+fragment 和 Fragment+Viewpager 优缺点
    Android App的签名打包(晋级篇)
    Android ProgressBar 进度条荧光效果
    Android UI【android 仿微信、QQ聊天,带表情,可翻页,带翻页拖动缓冲】
    Android UI--自定义ListView(实现下拉刷新+加载更多)
    Android平台下利用zxing实现二维码开发
    自定义组件---图片和文字实现ImageButton效果
    JNI由浅入深_10_JNI 综合开发
    开关按钮实现
    Android Asynctask与Handler的比较,优缺点区别,Asynctask源码
  • 原文地址:https://www.cnblogs.com/alfredsun/p/10777340.html
Copyright © 2020-2023  润新知