题目来源:

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. keep健身计划

    下一个月计划 1keep二周计划 2百度第一期学完 3百度前端技术学院提升

  2. BadUSB的防范研究

    近期爆出的badUSB漏洞,通过将病毒植入固件,能够伪装成键盘等设备,直接控制电脑,业界还没有非常好的修复方法. 从安全产品的角度.对于这个问题的防范,有下面几点可能不成熟的想法 1.病毒伪装成键盘. ...

  3. iOS开发-object-c之 @[], @{}

    今天看别人代码的时候发现这样的用法 navigationController.viewControllers = @[secondViewController]; 这里用到了@[]. 刚开始不是很明白 ...

  4. SQL练习之不破坏应用程序现有查询的修改模式

    当我还是一个菜鸟的时候,当然现在也是,当我的软件需求发生变化时,并且数据库设计同样要求发生变化,我通常会放弃原有的代码(或者对原有的代码进行大改),先在我知道了两个不破坏应用程序现有查询的修改模式,下 ...

  5. java中关于线程间协作所用关键字synchronized,wait,notify的用法

    wait/notify()关键字适用于一个线程通知另一个线程所需的条件状态已就绪,最常用于线程在循环中休眠直到获取特定条件的场景. 例如,一个线程一直等待直到队列中有一个组件能够处理:当组件添加到队列 ...

  6. iOS keyChain(钥匙串)的简单使用

    通常在开发中我们需要长久的保存某些值比如用户的账号密码等,对于隐私度很高的数据来说保证数据的安全性是尤为重要的.ios中的keyChain是一种很好的选择. 首先去开发者网站(https://deve ...

  7. google base库之simplethread

    // This is the base SimpleThread. You can derive from it and implement the // virtual Run method, or ...

  8. IO库 8.5

    题目:重写8.4中的函数,将每一个单词作为一个独立的元素进行存储. #include <iostream> #include <fstream> #include <st ...

  9. Easyui + jQuery表单提交 给 Controller patr1

    2014-11-15  总结上周在公司开发所用到的技术,由于是刚找的工作(一个大三实习生)+自己的技术菜,有很多地方都是怎么想就怎么实现的, 如果你有什么更好的解决方法,在看见这篇博客的时候,希望你能 ...

  10. Android 实现GIF播放(解码)

    实现原理很简单,先把GIF动画解码成多张Bitmap图片,然后放到AnimationDrawable里面去逐一播放即可. GifHelper代码: package com.android.view; ...