描述:给一个字符串s,查找它的最长的回文子串。s的长度不超过1000。

Input: "babad"
Output: "bab"
Note: "aba" is also a valid answer.
我是采用动态规划解决此题的。官方的solutions中提供了几种思路,包括我使用的DP。这里摘要如下: 思路1:
将s反转得到s',然后查找s和s'的最长公共子串substring,那么substring就是最长回文子串。
比如:s = "caba", s' = "abac" => substring = "aba"
但是存在特殊的情况如:
s = "abacdfgdcaba", s' = "abacdgfdcaba" => substring = "abacd"
可以看到substring并不是回文,这是因为s中存在子串s1和s2,而reverse(s1)=s2,但是s1本身并不是回文。
对这种情况,可以对比Index,检测反转后的substring是不是由反转前的substring得来。
至于查找s1和s2的最长公共子串,更优秀的方法可以参见:https://en.wikipedia.org/wiki/Longest_common_substring_problem 思路2:
直接暴力检索所有字符串是否回文,略过。 思路3(DP):
定义P(i,j)表示在s中索引i~j的字串是否为回文。则有:
P(i,j) = (P(i+1,j-1) and s[i] == s[j]),即当且仅当字符s[i] == s[j]且子串s(i+1,j-1)是回文时,s(i,j)是回文;
基础情形:
P(i,i) = true
P(i,i+1) = s[i] == s[i+1] 思路4:
任何一个回文子串都是由一个分隔点不断向两侧扩展相同字符得来的,因此只需要以每个字符或字符间隔点起始向两侧尽可能扩展,筛选最长的子串即可。此思路看起来似乎不怎么样,但是其时间复杂度也只有O(n的平方),而空间复杂度只有O(1)。 思路5:
详细见:https://articles.leetcode.com/longest-palindromic-substring-part-ii/

LeetCode-5:Longest Palindromic Substring(最长回文子字符串)的更多相关文章

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

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

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

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

  3. [leetcode]5. Longest Palindromic Substring最长回文子串

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

  4. [LeetCode] 516. Longest Palindromic Subsequence 最长回文子序列

    Given a string s, find the longest palindromic subsequence's length in s. You may assume that the ma ...

  5. 1. Longest Palindromic Substring ( 最长回文子串 )

    要求: Given a string S, find the longest palindromic substring in S. (从字符串 S 中最长回文子字符串.) 何为回文字符串? A pa ...

  6. [LeetCode] Longest Palindromic Substring 最长回文串

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

  7. 【LeetCode】5. Longest Palindromic Substring 最长回文子串

    作者: 负雪明烛 id: fuxuemingzhu 个人博客: http://fuxuemingzhu.cn/ 公众号:负雪明烛 本文关键词:最长回文子串,题解,leetcode, 力扣,python ...

  8. LeetCode:Longest Palindromic Substring 最长回文子串

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

  9. 【翻译】Longest Palindromic Substring 最长回文子串

    原文地址: http://articles.leetcode.com/2011/11/longest-palindromic-substring-part-i.html 转载请注明出处:http:// ...

随机推荐

  1. iOS多线程与网络开发之多线程概述

    郝萌主倾心贡献,尊重作者的劳动成果,请勿转载. 假设文章对您有所帮助,欢迎给作者捐赠.支持郝萌主,捐赠数额任意,重在心意^_^ 我要捐赠: 点击捐赠 Cocos2d-X源代码下载:点我传送 游戏官方下 ...

  2. Spring学习五----------Bean的配置之Bean的生命周期

    © 版权声明:本文为博主原创文章,转载请注明出处 Bean的生命周期 1.定义 2.初始化 3.使用 4.销毁 初始化和销毁的三种方式 1.实现org.springframework.beans.fa ...

  3. ExtJs5.1多选下拉框CheckComb

    ExtJs这么多个版本号了.可就是不提供多选下拉框,老外不用这个玩意吗? 5都出来这么久了,新写的项目就用5吧,把曾经Extjs4.2的时搜到前人的CheckComb改巴改巴.能用了就赶紧贴上来,没有 ...

  4. 有关SQL注入的知识

    SQL注入攻击是非常令人讨厌的安全漏洞,是所有的web开发人员,不管是什么平台,技术,还是数据层,需要确信他们理解和防止的东西.不幸的是,开发人员往往不集中花点时间在这上面,以至他们的应用,更糟糕的是 ...

  5. python学习(五)列表

    #!/usr/bin/python # 列表的学习, 列表的概念不陌生, 就是熟悉一下python中的列表是如何操作的 # 1. 序列的操作 L = [ 123, 'spam', 1.23] # 里面 ...

  6. A和B是好友,他们经常在空闲时间聊天,A的空闲时间为[a1 ,b1 ],[a2 ,b2 ]..[ap ,bp ]。B的空闲时间是[c1 +t,d1 +t]..[cq +t,dq +t],这里t为B的起床时间。这些时间包括了边界点。B的起床时间为[l,r]的一个时刻。若一个起床时间能使两人在任意时刻聊天,那么这个时间就是合适的,问有多少个合适的起床时间?

    // ConsoleApplication5.cpp : 定义控制台应用程序的入口点. // #include "stdafx.h" #include<vector> ...

  7. zabbix 3.2.4 安装

    一.安装mysql . 安装必备组件 yum install –y autoconf automake imake libxml2-devel expat-devel cmake gcc gcc-c+ ...

  8. mysql-mongdb-redis

    千万级别:mysql 千万以及亿级别:mongdb

  9. eclipse spring4 ehache2.10 整合

    http://blog.csdn.net/tonytfjing/article/details/39251507 http://my.oschina.net/duoduo3369/blog/17392 ...

  10. 利用python进行数据分析之pandas入门

    转自https://zhuanlan.zhihu.com/p/26100976 目录: 5.1 pandas 的数据结构介绍5.1.1 Series5.1.2 DataFrame5.1.3索引对象5. ...