题目

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. struts2第四天——拦截器和标签库

    一.拦截器(interceptor)概述 struts2是个框架,里面封装了很多功能,封装的很多功能都是在拦截器里面. (属性封装.模型驱动等都是封装在拦截器里面) struts2里面封装了很多功能, ...

  2. 20145207《Java程序设计》实验五(网络编程与安全)实验报告

    <Java 程序设计>实验五(网络编程与安全)实验报告 目录 改变 网络编程与安全实验要求 实验成果 课后思考 改变 修改了之前仅仅是贴了图片,连代码都没粘的状态.不过这篇博客我只能做到写 ...

  3. mfc 类的析构函数

     析构函数  自定义析构函数 一.析构函数 析构函数(destructor) 与构造函数相反,当对象生命周期结束时(例如对象所在的函数已调用完毕),系统自动执行析构函数.析构函数往往用来做“清理善 ...

  4. 【LG3249】[HNOI2016]矿区

    [LG3249][HNOI2016]矿区 题面 洛谷 题解 先平面图转对偶图, 建好了对偶图之后随意拿出一个生成树,以无边界的范围为根. 无边界的范围很好求,用叉积算出有向面积时,算出来是负数的就是无 ...

  5. 非局部均值滤波算法的python实现

    如题,比opencv自带的实现效果好 #coding:utf8 import cv2 import numpy as np def psnr(A, B): return 10*np.log(255*2 ...

  6. htm5移动端开发 和 pc端开发

    htm5移动端开发: 移动端开发需要注意的一些事情:http://www.duanliang920.com/learn/web/html5/321.html HTML5移动端手机网站开发流程:http ...

  7. linux多项目分别使用不同jdk版本(tomcat版)

    此操作只针对tomcat 背景:linux服务器普通用户默认版本为jdk6,jboss项目使用jdk6版本 ,但是tomcat需要使用jdk7.当然也可以分开使用不同账户来启用这两个项目,下面主要介绍 ...

  8. c#多线程中Lock()关键字的用法小结

    本篇文章主要是对c#多线程中Lock()关键字的用法进行了详细的总结介绍,需要的朋友可以过来参考下,希望对大家有所帮助     本文介绍C# lock关键字,C#提供了一个关键字lock,它可以把一段 ...

  9. [硬件配置]记录Ubuntu 14.04 下安装无线网卡驱动解决无法连接WiFi的过程

    新电脑安装了Ubuntu 14.04,但是网络连接中只有以太网而没有WiFi的选项. 打开System Setting系统设置-Software&Updates软件&更新-Additi ...

  10. python类与对象的组合与继承

    1.把类的对象实例化放到一个新的类里面叫做类的组合,组合就是指几个横向关系的类放在一起,纵向关系的类放在一起是继承,根据实际应用场景确定.简单的说,组合用于“有一个”的场景中,继承用于“是一个”的场景 ...