想了很多方法 搞轴对称,算对称轴,偶数都搞出了一堆0.5在那加加减减,最后发现在移轴之前可能就返回了。

class Solution:
def longestPalindrome(self, s: str) -> str:
# longest palindromic substring lenth < 1000
# NULL
lengthS = len(s)
if lengthS == 0:
return ''
# ---
# regular
# a not empty string must have 1 letterd palindromic substring:string[0]
longestPalindSubStringLength = 1
longestPalindSubString = s[0]
if lengthS == 1:
return longestPalindSubString
#for any string,the longest palindoromic subtring is when the axis in the middle
if lengthS %2 == 1:
#even
axis = lengthS // 2
offset = [0]
for i in range(1, axis):
offset.append(i)
offset.append(-i)
for index in range(len(offset)): # move axis[0,+1,-1,+2,-2...]
currentaxis = axis + offset[index]
for decrease in range(0, currentaxis):
if (lengthS // 2 - currentaxis) > 0:
# axis at leftside
tempstr = s[decrease:2 * currentaxis - decrease]
tempstrlength = len(tempstr)
if tempstrlength < 2 or tempstrlength <longestPalindSubStringLength:
continue
if (self.isPalind(tempstr)):
if tempstrlength > longestPalindSubStringLength:
longestPalindSubString = tempstr
else:
# axis at rightside middle
tempstr = s[currentaxis - ((lengthS-1-decrease) - currentaxis):lengthS - decrease]
tempstrlength = len(tempstr)
if tempstrlength < 2 or tempstrlength <longestPalindSubStringLength:
continue
if (self.isPalind(tempstr)):
if tempstrlength > longestPalindSubStringLength:
longestPalindSubString = tempstr
else:
#odd
#---
#self middle have no axis in int. have to check first
axis = lengthS / 2 -0.5 #2.5
offset = []
if axis >1:
for i in range(1, int(axis + 0.5)):
offset.append(i - 0.5)
offset.append(-(i - 0.5))
for index in range(len(offset)): # move axis[0,+0.5,-0.5,+1.5,-1.5...]
currentaxis = int(axis + offset[index]) for decrease in range(0, currentaxis):
if (lengthS // 2 - currentaxis) > 0:
# axis at leftside
tempstr = s[decrease:2 * currentaxis - decrease]
tempstrlength = len(tempstr)
if tempstrlength < 2 or tempstrlength <longestPalindSubStringLength:
continue
if (self.isPalind(tempstr)):
if tempstrlength > longestPalindSubStringLength:
longestPalindSubString = tempstr
else:
# axis at rightside
tempstr = s[currentaxis - ((lengthS-1-decrease) - currentaxis):lengthS - decrease]
tempstrlength = len(tempstr)
if tempstrlength < 2 or tempstrlength < longestPalindSubStringLength:
continue
if (self.isPalind(tempstr)):
if tempstrlength > longestPalindSubStringLength:
longestPalindSubString = tempstr 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

testcase101:

"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabcaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"

后来发现稍微做下优化 提前return就能达到时间限制。

103 / 103 test cases passed.
Status:

Accepted

Runtime: 8876 ms
Memory Usage: 13.2 MB
Submitted: 4 minutes ago
class Solution:
def longestPalindrome(self, s: str) -> str:
# longest palindromic substring lenth < 1000
# NULL
lengthS = len(s)
if lengthS == 0:
return ''
#all same
if lengthS == s.count(s[0]):
return s
# ---
# regular
# a not empty string must have 1 letterd palindromic substring:string[0]
longestPalindSubStringLength = 1
longestPalindSubString = s[0]
for start in range(lengthS):
for end in range(start + 1, lengthS + 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,-1)
currentstring = s[start:end]
currentstringLength = len(s[start:end])
# one letter
if len(currentstring) == 1 or currentstringLength <= longestPalindSubStringLength:
continue
if (self.isPalind(currentstring)):
if currentstringLength > longestPalindSubStringLength:
if end == lengthS:
return currentstring #speed up
longestPalindSubStringLength = currentstringLength
longestPalindSubString = currentstring 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

最后抄袭一个92ms的Manacher's Algorithm算法:

class Solution:
def longestPalindrome(self, s: str) -> str:
res = 0
p = ""
for i in range(0, len(s)): #
for d in [0,1]:
if s[i-res:i][::-1] == s[i+d:i+res+d]:
j = res+1
while (i-j >= 0) and (i+j+d) <= len(s) and s[i-j] == s[i+j+d-1]:
j += 1 if j > res+1 or d == 1:
p = s[i-j+1:i+j+d-1]
res = len(p) // 2 return p

[leetcode] 5.Longest Palindromic Substring-2的更多相关文章

  1. LeetCode(4) || Longest Palindromic Substring 与 Manacher 线性算法

    LeetCode(4) || Longest Palindromic Substring 与 Manacher 线性算法 题记 本文是LeetCode题库的第五题,没想到做这些题的速度会这么慢,工作之 ...

  2. Leetcode 5. Longest Palindromic Substring(最长回文子串, Manacher算法)

    Leetcode 5. Longest Palindromic Substring(最长回文子串, Manacher算法) Given a string s, find the longest pal ...

  3. 求最长回文子串 - leetcode 5. Longest Palindromic Substring

    写在前面:忍不住吐槽几句今天上海的天气,次奥,鞋子里都能养鱼了...裤子也全湿了,衣服也全湿了,关键是这天气还打空调,只能瑟瑟发抖祈祷不要感冒了.... 前后切了一百零几道leetcode的题(sol ...

  4. LeetCode 5 Longest Palindromic Substring(最长子序列)

    题目来源:https://leetcode.com/problems/longest-palindromic-substring/ Given a string S, find the longest ...

  5. 【JAVA、C++】LeetCode 005 Longest Palindromic Substring

    Given a string S, find the longest palindromic substring in S. You may assume that the maximum lengt ...

  6. leetcode:Longest Palindromic Substring(求最大的回文字符串)

    Question:Given a string S, find the longest palindromic substring in S. You may assume that the maxi ...

  7. [LeetCode][Python]Longest Palindromic Substring

    # -*- coding: utf8 -*-'''__author__ = 'dabay.wang@gmail.com'https://oj.leetcode.com/problems/longest ...

  8. 【LeetCode】Longest Palindromic Substring 解题报告

    DP.KMP什么的都太高大上了.自己想了个朴素的遍历方法. [题目] Given a string S, find the longest palindromic substring in S. Yo ...

  9. [LeetCode] 5. Longest Palindromic Substring 最长回文子串

    Given a string s, find the longest palindromic substring in s. You may assume that the maximum lengt ...

  10. 最长回文子串-LeetCode 5 Longest Palindromic Substring

    题目描述 Given a string S, find the longest palindromic substring in S. You may assume that the maximum ...

随机推荐

  1. Vb.net MakeLong MAKELPARAM 合并整数代码

    Function MAKELPARAM(wLow As UShort, wHigh As UShort) As UInteger Return wHigh * &H10000 + wLow E ...

  2. 利用AccessibilityService自动获取微信号(Android)

    前言: 最近遇到一个需求,要求写一个小插件,能够自动在微信的页面弹出一个窗口,展示用户的相关信息(与我们公司有关的信息,方便运营快速了解用户信息). 当时我第一反应是不可能,如果能够在别的app中获取 ...

  3. Android ViewPager+Fragment 在Activity中获取Fragment的控件

    如果ViewPager+Fragment实现Tab切换,在activity中利用adapter.getItem获取到fragment然后再根据fragment.的方法获取控件 //隐藏求租,以下代码用 ...

  4. ThreadLocal说明

    ThreadLocal说明 类ThreadLocal主要为了解决每个线程绑定自己的私有的值,可以吧ThreadLocal比如可全部存放的数据,每个线程都可以在里面存放自己的数据,并且不会和其他线程冲突 ...

  5. 简单shellcode编写

    0x00 介绍 Shellcode 是指经过精心设计的一串指令,一旦注入正在运行的应用程序中即可运行,常用于栈和基于堆的溢出.术语Shellcode意思指的便是用于启动一个命令Shell的已编写好的可 ...

  6. WinForm 双向数据绑定

    程序目标: 控件的属性值与对象的属性值双向绑定使窗口控件的属性值与对象的属性值保持一致.对窗口控件属性值更改后立即更新对象的属性值,对对象的属性值更改后立即更新窗口控件的属性值. 程序完整代码包:ht ...

  7. Java中String、StringBuilder、StringBuffer的区别

    常量还是变量: String是字符串常量(以final修饰符进行修饰,不可更改): StringBuilder是字符串变量 StringBuffer是字符串变量 线程安全: String无所谓线程安全 ...

  8. PHP 函数漏洞总结

    1.MD5 compare漏洞 PHP在处理哈希字符串时,会利用"!="或"=="来对哈希值进行比较,它把每一个以"0E"开头的哈希值都解释 ...

  9. IBM developer:Kafka ACLs

    Overview In Apache Kafka, the security feature is supported from version 0.9. When Kerberos is enabl ...

  10. In action "Setting JDBC driver jar location unix [Set a variable]" (screen "Select a Database [Configurable banner form]"), property "Script":

    java.lang.Exception: JDBC Driver Jar not found. Looking for: /u01/oracle/GG_Director/ERROR: Unresolv ...