题目来源:

https://leetcode.com/problems/longest-palindromic-substring/


题意分析:

这道题目是输入一段不超过1000的字符串,输出最长的回文子字符串,输入的字符串有一个唯一的最长回文子字符串(个人觉得这个没什么用,还限制了一些输入,比如长度为2的时候肯定就只能输入两个相同的字符,还不如改为有同样长度的输出第一个最长回文子字符串,所以该题目我是按照第一个最长回文子字符串)。


题目思路:

题目的字符串长度是1000,如果我们暴力解决,那么构造字符串时间复杂度(O(n^2)),判断字符串是不是回文字符串时间复杂度(O(n))总的时间复杂度是(O(n^3)),如果暴力解决,那么肯定是会TLE的。

寻找回文字符串一般有两种方法。第一种是先构造一个字符串,从首尾开始判断是否对应相等。这种方法需要的时间复杂度比较大。第二种方法是从中间往两边找,直到找到两边不一样。这种方法我们要先确定中间的key字符,这里由于当重复字符出现的时候,应该把这些重复的字符捆在一起,因为重复字符出现的时候放中间可以保证满足是回文字符串。比如’'abbbbba’,如果我们将’bbbbb’捆在一起可以减少很多不必要的判断,而且可以避免回文字符串个数为偶数的时候被忽略的情况,比如’abba’。

那么我们可以初始化回文子字符串为s[0],长度是1,从第一个字符开始往两边找,记录从这个字符为中间字符搜索的回文字符串的长度,如果大于当前记录的回文,那么替换当前的字符串及其长度。从中间找到了最后一位或者以最后一个字符为中间key字符的时候结束。这种方法最坏的情况是’ababababababababa……bac’,这种情况的时间复杂度是(0 + 1 + 2 +…+n - 1) = (O(n^2)),由于字符串长度为1000,所以(O(n^2))的时间复杂度是可以接受的。


代码(python):

 class Solution(object):
def longestPalindrome(self, s):
"""
:type s: str
:rtype: str
"""
size = len(s)
if size == 1:
return s
if size == 2:
if s[0] == s[1]:
return s
return s[0]
maxp = 1
ans = s[0]
i = 0
while i < size:
j = i + 1
while j < size:
if s[i] == s[j]:
j += 1
else:
break
k = 0
while i - k - 1 >= 0 and j + k<= size - 1:
if s[i- k - 1] != s[j + k]:
break
k += 1
if j - i + 2*k > maxp:
maxp = j- i + 2*k
ans = s[i - k:j + k]
if j + k == size - 1:
break
i = j
return ans

转载请注明出处:http://www.cnblogs.com/chruny/

[LeetCode]题解(python):005-Longest Palindromic Substring的更多相关文章

  1. 【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 ...

  2. 【LeetCode】005. Longest Palindromic Substring

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

  3. 005 Longest Palindromic Substring 最长回文子串

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

  4. No.005 Longest Palindromic Substring

    5. Longest Palindromic Substring Total Accepted: 120226 Total Submissions: 509522 Difficulty: Medium ...

  5. leetcode 第五题 Longest Palindromic Substring (java)

    Longest Palindromic Substring Given a string S, find the longest palindromic substring in S. You may ...

  6. leetcode第五题--Longest Palindromic Substring

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

  7. LeetCode--No.005 Longest Palindromic Substring

    5. Longest Palindromic Substring Total Accepted: 120226 Total Submissions: 509522 Difficulty: Medium ...

  8. Leetcode:【DP】Longest Palindromic Substring 解题报告

    Longest Palindromic Substring -- HARD 级别 Question SolutionGiven a string S, find the longest palindr ...

  9. leetcode--5 Longest Palindromic Substring

    1. 题目: Given a string S, find the longest palindromic substring in S. You may assume that the maximu ...

  10. LeetCode(5)Longest Palindromic Substring

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

随机推荐

  1. New Relic——手机应用app开发达人的福利立即就到啦!

    HiWork集成的第三方服务(机器人)将有新的添加啦,添加了BitBucket和New Relic.分别做下介绍啦! 1.BitBucket BitBucket 是一家源码托管站点.採用Mercuri ...

  2. linux性能监控三张图

    一.监控 二.测试 三.优化

  3. 利用Socket实现的两个程序的通信

    写的也很简单,自己觉得挺有意思了 程序如图 主要代码 public class Message { Form1 mainfrom = null; public Message() { } public ...

  4. Javascript知识三

    O(∩_∩)O...今天继续学习了Javascript的知识,下面就总结一下. 数组: 判断是否为数组(instanceof Array) 在JavaScript中,数组不一定是同一类型 var ar ...

  5. oracle归档日志

    前几天因为导入大的东西,弄得很久都没动静,一看最后才发现是归档满了.但是很多的命令还是很是很不熟悉,所以看了下,百度了下.整理下这个. 1.查看归档日志大小及使用情况 select * from v$ ...

  6. (总结)Nginx/LVS/HAProxy负载均衡软件的优缺点详解

    PS:Nginx/LVS/HAProxy是目前使用最广泛的三种负载均衡软件,本人都在多个项目中实施过,参考了一些资料,结合自己的一些使用经验,总结一下. 一般对负载均衡的使用是随着网站规模的提升根据不 ...

  7. poj 1321 棋盘问题 递归运算

    棋盘问题 Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 19935   Accepted: 9933 Description ...

  8. android netty5.0 编译时 java.lang.NoClassDefFoundError: io.netty.channel.nio.NioEventLoopGroup

    android netty5.0 编译时 java.lang.NoClassDefFoundError: io.netty.channel.nio.NioEventLoopGroup 复制netty包 ...

  9. MYSQL alter procedure alter function 它们只可以更改过程的特性,不可以更改过程的逻辑。

    例子: delimiter // create procedure proc_a(in numberA int) 这样create procedure 是正确的 begin select number ...

  10. 转: git常用命令

    # git配置 #---------------------------------------------- #配置用户名和邮箱: $ git config --global user.name & ...