[leetcode] 5.Longest Palindromic Substring-2
想了很多方法 搞轴对称,算对称轴,偶数都搞出了一堆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的更多相关文章
- LeetCode(4) || Longest Palindromic Substring 与 Manacher 线性算法
LeetCode(4) || Longest Palindromic Substring 与 Manacher 线性算法 题记 本文是LeetCode题库的第五题,没想到做这些题的速度会这么慢,工作之 ...
- Leetcode 5. Longest Palindromic Substring(最长回文子串, Manacher算法)
Leetcode 5. Longest Palindromic Substring(最长回文子串, Manacher算法) Given a string s, find the longest pal ...
- 求最长回文子串 - leetcode 5. Longest Palindromic Substring
写在前面:忍不住吐槽几句今天上海的天气,次奥,鞋子里都能养鱼了...裤子也全湿了,衣服也全湿了,关键是这天气还打空调,只能瑟瑟发抖祈祷不要感冒了.... 前后切了一百零几道leetcode的题(sol ...
- LeetCode 5 Longest Palindromic Substring(最长子序列)
题目来源:https://leetcode.com/problems/longest-palindromic-substring/ Given a string S, find the longest ...
- 【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 ...
- leetcode:Longest Palindromic Substring(求最大的回文字符串)
Question:Given a string S, find the longest palindromic substring in S. You may assume that the maxi ...
- [LeetCode][Python]Longest Palindromic Substring
# -*- coding: utf8 -*-'''__author__ = 'dabay.wang@gmail.com'https://oj.leetcode.com/problems/longest ...
- 【LeetCode】Longest Palindromic Substring 解题报告
DP.KMP什么的都太高大上了.自己想了个朴素的遍历方法. [题目] Given a string S, find the longest palindromic substring in S. Yo ...
- [LeetCode] 5. Longest Palindromic Substring 最长回文子串
Given a string s, find the longest palindromic substring in s. You may assume that the maximum lengt ...
- 最长回文子串-LeetCode 5 Longest Palindromic Substring
题目描述 Given a string S, find the longest palindromic substring in S. You may assume that the maximum ...
随机推荐
- 无需***,轻松提速 Github
无需***,轻松提速 Github 众所周知,Github 是全球程序员最喜欢访问的网站之一,但是在国内,会很容易出现一个水土不服的局面 -- 下载不了(稍微大一点中途就报错了),下载速度慢 .... ...
- IT技术团队管理之成长
------------------------------------------------------------------ 今天先到这儿,希望对您技术领导力, 企业管理,系统架构设计与评估, ...
- Docker 容器镜像删除
1.停止所有的container,这样才能够删除其中的images: docker stop $(docker ps -a -q) 如果想要删除所有container的话再加一个指令: docker ...
- 持续集成-jenkins介绍与环境搭建
什么是持续集成? 转自:https://blog.csdn.net/tanshizhen119/article/details/80328523 持续集成,俗称CI, 大师Martin Fowler对 ...
- mac git从代码仓库克隆代码,修改并上传
1:添加本地秘钥到代码仓库中 open ~/ .ssh 以github为例: mac 命令行输入open ~/ .ssh,打开id_rsa.pub文件中的内容,复制到github->settin ...
- DVWA 黑客攻防实战(十五) 绕过内容安全策略 Content Security Policy (CSP) Bypass
看到标题,是否有点疑惑 CPS 是什么东东.简单介绍一下就是浏览器的安全策略,如果 标签,或者是服务器中返回 HTTP 头中有 Content-Security-Policy 标签 ,浏览器会根据标签 ...
- Git-初始化配置及SSH_key配置
step1.安装完Git,执行检查是否安装成功:git --version step2.配置全局变量 配置完执行检查:git config --list step3.生成SSH_KEY 如果报ssh- ...
- 逆向-攻防世界-logmein
iDA载入程序,shift+F12查看关键字符串,找到双击来到所在地址,进入函数 然后进入主函数, 经过分析,可以得出:输入的字符要等于 经过处理的v7和v8的异或.v8很明显,但是v7是怎么回事呢 ...
- 让自己的开源项目支持CocoaPods
测试的时候找个自己封装的方法或UI控件就可以了 这里用我刚封装的Redirect重定向的请求体为例 1, 在github上创建一个Redirect,重要:记得选择开源协议 (MIT)(如果木有GitH ...
- python中可变与不可变类型变量中一些较难理解的地方
当函数内部引用一个全局变量时,如果此全局变量为可变类型,那么函数内部是可以改变此全局变量的值,用不用globale申明全局变量都一样.但是如果想给此变量重新赋值则必须要使用global. l = [] ...