题目

Given a string s, find the longest palindromic substring in s. You may assume that the maximum length of s is 1000.

Example:

Input: "babad"
Output: "bab"

Note: "aba" is also a valid answer.

Example:

Input: "cbbd"
Output: "bb"

翻译

回文字符串 即类似 abcba 正读和逆序读是一样的字符串

本题要求最长回文字符子串

Hints

Related Topics: String

回文字符串可以通过递归的方法判断 一开始想到的是通过将原字符串倒置(reverse) 然后求两个字符串的最大公共子串 即是最大回文字符串 但是失策了 如果出现类似 abcdfrcba 就会将 abc 判断为回文字符串(囧)

所以还是遍历字符串 追踪最长回文字符串的长度 每遍历时增加一个字符 那么 maxlen 可能加1或者加2 但不可能加3 所以只需要检查以该字符结尾往前的 maxlen(意味着可能加1) 或者 maxlen-1(意味着可能加2) 个字符组成的字符串是否是回文字符串

至于为什么不能加3 证明如下:

如果现在的maxlen=3 现在遍历到字符 a
1. 我们检查 ×××a 如果是回文字符串 maxlen+1 = 4
2. 我们检查 ××××a 如果是回文字符串 maxlen+2 = 5
3. 不检查 xxa 这样回文字符串长度没有增加
4. 不检查 ×××××a 因为如果它是回文字符串 那么必是 a××××a 中间的 ×××× 也是回文字符串 maxlen 是 4 而不是 3

代码

Java

//原理是相同的
class Solution {
int maxlen, lo;
public String longestPalindrome(String s) {
int len = s.length();
if(len<2) return s; for(int i=0;i<len-1;i++){
extendPalindrome(s, i, i);
extendPalindrome(s, i, i+1);
}
return s.substring(lo,lo+maxlen);
}
public void extendPalindrome(String s,int start, int end){
while(start>=0 && end<s.length() && s.charAt(start)==s.charAt(end)){
start--;
end++;
}
if(maxlen<end-start-1){
lo = start+1;
maxlen = end-start-1;
} }
}

Python

class Solution(object):
def judge(self, s, start, end):
if start<0: return False
while start<end:
if s[start]==s[end]:
start += 1
end -= 1
else:
return False
return True
def longestPalindrome(self, s):
"""
:type s: str
:rtype: str
"""
maxlen = 0
res = '' for i in range(len(s)):
if self.judge(s, i-maxlen-1, i):
res = s[i-maxlen-1:i+1]
maxlen += 2
elif self.judge(s, i-maxlen,i):
res = s[i-maxlen:i+1]
maxlen += 1
return res

蜗牛慢慢爬 LeetCode 5.Longest Palindromic Substring [Difficulty: Medium]的更多相关文章

  1. 蜗牛慢慢爬 LeetCode 2. Add Two Numbers [Difficulty: Medium]

    题目 You are given two non-empty linked lists representing two non-negative integers. The digits are s ...

  2. 蜗牛慢慢爬 LeetCode 3. Longest Substring Without Repeating Characters [Difficulty: Medium]

    题目 Given a string, find the length of the longest substring without repeating characters. Examples: ...

  3. 蜗牛慢慢爬 LeetCode 10. Regular Expression Matching [Difficulty: Hard]

    题目 Implement regular expression matching with support for '.' and '*'. '.' Matches any single charac ...

  4. LeetCode(4) || Longest Palindromic Substring 与 Manacher 线性算法

    LeetCode(4) || Longest Palindromic Substring 与 Manacher 线性算法 题记 本文是LeetCode题库的第五题,没想到做这些题的速度会这么慢,工作之 ...

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

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

  6. 求最长回文子串 - leetcode 5. Longest Palindromic Substring

    写在前面:忍不住吐槽几句今天上海的天气,次奥,鞋子里都能养鱼了...裤子也全湿了,衣服也全湿了,关键是这天气还打空调,只能瑟瑟发抖祈祷不要感冒了.... 前后切了一百零几道leetcode的题(sol ...

  7. LeetCode 5 Longest Palindromic Substring(最长子序列)

    题目来源:https://leetcode.com/problems/longest-palindromic-substring/ Given a string S, find the longest ...

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

  9. leetcode:Longest Palindromic Substring(求最大的回文字符串)

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

随机推荐

  1. JavaWeb基础—项目名的写法

    ${pageContext.request.contextPath} //jsp中 request.getContextPath() //Servlet中 两者获取到的都是"/项目名称&qu ...

  2. cogs791 [HAOI2012] 音量调节

    大水题 这种题谁不能1A谁就吔屎/退役吧(说的就是我) 设dp[i][j]表示调完前i个音量为j有没有可能 没了 // It is made by XZZ // Fei Fan Ya Xi Lie~~ ...

  3. win8.1下右下角出现大小写切换状态显示框解决方案

    HKEY_LOCAL_MACHINE\SOFTWARE\Cambridge Silicon Radio\Harmony\Default双击右侧 OSD 将键值改成0 重启机器 成功关闭显示

  4. Flutter - 下载别人的Flutter项目,本地编译不过

    如果直接下载了别人的Flutter项目,点击运行基本会不通过的,这是gradle版本差异造成的. 你需要修改android/gradle/wrapper/gradle-wrapper.properti ...

  5. vs2012 与 win7 不兼容的问题

    Visual Studio 2012 与此版本的 Windows 不兼容 突然出现的,如下图: 这个是网上找的图,我的没来得及截图就修复了,基本一致,只是我的是win7 64位系统,所以安装位置那里是 ...

  6. 在WebGL场景中进行棋盘操作的实验

    这篇文章讨论如何在基于Babylon.js的WebGL场景中,建立棋盘状的地块和多个可选择的棋子对象,在点选棋子时显示棋子的移动范围,并且在点击移动范围内的空白地块时向目标地块移动棋子.在这一过程中要 ...

  7. Unity3D — — UGUI之RectTransform

    Mask.GetComponent<RectTransform>().anchoredPosition(子物体) = hotKey_image.rectTransform.anchored ...

  8. c++三大概念要分清--重载,隐藏(重定义),覆盖(重写)

    重载,隐藏(重定义),覆盖(重写)—这几个名词看着好像很像,不过其实一样都不一样!! 综述: 说明:覆盖中的访问修饰符可以不同是指可以不用显示地用virtual:当访问修饰符改为const或者stat ...

  9. 有序链表转换二叉搜索树(LeetCode)

    将一个按照升序排列的有序数组,转换为一棵高度平衡二叉搜索树. 本题中,一个高度平衡二叉树是指一个二叉树每个节点 的左右两个子树的高度差的绝对值不超过 1. 示例: 给定有序数组: [-10,-3,0, ...

  10. windows下在virtualbox中的Fuel Openstack 9.0 安装过程

    一.材料: 1.软件: virtualbox xshell(或putty,winscp) bootstrap.zip(580MB) mirrors(3.01GB) MirantisOpenStack- ...