想了很多方法 搞轴对称,算对称轴,偶数都搞出了一堆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. C# winform 拖拽效果

    //是否在拖拽 bool isDrag = false; //鼠标相对于button控件左上角的坐标 Point contextbtnPoint = Point.Empty; private void ...

  2. 服务器端Session和客户端Session

    客户端Session和服务器端Session 当用户首次与web服务器建立连接的时候,服务器会给用户分发一个SessionID作为标识.SessionID是一个由24个字符组成的随机字符串.用户每次提 ...

  3. 最近javascript的学习小记

    一.关于javascript的原型与隐式原型 1.prototype 首先function是一个对象,每一个function都具有一个prototype对象,prototype对象默认是{constr ...

  4. C# 利用位运算传递多个参数方法

    前言 在工作中用sendMessage的方法向另外一个进程中传递窗体的位置,长度,宽度四个值,但是sendMessage的方法签名中只有两个参数.于是在网上找到了一些代码,找到了这个利用位运算来合并参 ...

  5. Java中单例模式的几种实现

    目录 懒汉式单例 简单版本 synchronized版本 双重检查(Double-Check)版本 volatile 饿汉式单例 实现1 其他实现方式 静态内部类-Effective Java 枚举- ...

  6. cvc-elt.1: Cannot find the declaration of element 'beans'Failed to read schema document 'http://www.springframework.org/schema/beans/spring- beans-3.0.xsd'

    Multiple annotations found at this line: - cvc-elt.1: Cannot find the declaration of element 'beans' ...

  7. python3 tkinter报错:_tkinter.TclError: cannot use geometry manager pack inside . which already has slaves managed by grid

    报错: _tkinter.TclError: cannot use geometry manager pack inside . which already has slaves managed by ...

  8. ubuntu18.04修改网卡名称为eth0

    1.修改grub文件 vim /etc/default/grub 查找 GRUB_CMDLINE_LINUX="" 修改为 GRUB_CMDLINE_LINUX="net ...

  9. VUE路由新页面打开的方法总结

    平常做单页面的场景比较多,所以大部分的业务是在同一个页面进行跳转.要通过VUE路由使用新页面打开且传递参数,可以采用以下两个方法: 1.router-link的target <router-li ...

  10. 老白关于rac性能调优的建议(10gRAC)

    RAC应用设计方面需要在底层做很有设计.虽然ORACLE的售前人员总是说RAC的扩展性是透明的,只要把应用分到不同的节点,就可以平滑的扩展系统能力了.而事实上,RAC的CACHE FUSION机制决定 ...