题目

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

Example:

  1. Input: "babad"
  2. Output: "bab"

Note: "aba" is also a valid answer.

Example:

  1. Input: "cbbd"
  2. Output: "bb"

翻译

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

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

Hints

Related Topics: String

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

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

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

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

代码

Java

  1. //原理是相同的
  2. class Solution {
  3. int maxlen, lo;
  4. public String longestPalindrome(String s) {
  5. int len = s.length();
  6. if(len<2) return s;
  7. for(int i=0;i<len-1;i++){
  8. extendPalindrome(s, i, i);
  9. extendPalindrome(s, i, i+1);
  10. }
  11. return s.substring(lo,lo+maxlen);
  12. }
  13. public void extendPalindrome(String s,int start, int end){
  14. while(start>=0 && end<s.length() && s.charAt(start)==s.charAt(end)){
  15. start--;
  16. end++;
  17. }
  18. if(maxlen<end-start-1){
  19. lo = start+1;
  20. maxlen = end-start-1;
  21. }
  22. }
  23. }

Python

  1. class Solution(object):
  2. def judge(self, s, start, end):
  3. if start<0: return False
  4. while start<end:
  5. if s[start]==s[end]:
  6. start += 1
  7. end -= 1
  8. else:
  9. return False
  10. return True
  11. def longestPalindrome(self, s):
  12. """
  13. :type s: str
  14. :rtype: str
  15. """
  16. maxlen = 0
  17. res = ''
  18. for i in range(len(s)):
  19. if self.judge(s, i-maxlen-1, i):
  20. res = s[i-maxlen-1:i+1]
  21. maxlen += 2
  22. elif self.judge(s, i-maxlen,i):
  23. res = s[i-maxlen:i+1]
  24. maxlen += 1
  25. 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. 20145209刘一阳《JAVA程序设计》第三周课堂测试

    第三周课堂测试 1.使用汇编语言编写指令时,用一些简单的容易记忆的符号来代替二进制指令,比机器语言更为方便,属于高级语言.(B) A .true B .false 2.下列说法正确的是(ABCD) A ...

  2. IDEA/Git 设置多个push远程仓库或者同时提交多个push仓库

    注:写在最上面的这个提交地址将会是唯一的pull地址 具体解决办法: 在隐藏文件.git 下有个config文件,打开,在最后一行添加以下信息 [remote "all"] url ...

  3. 【PaPaPa】系统架构搭建浅析 - 人人可以搭架构

    声明 [PaPaPa]这个项目是以技术分享与研究为目的而做的,并非商业项目,所以更多的是提供一种思路,请勿直接在项目中使用. 上一篇隐藏开源项目地址实属无奈,为了寻找一起做这件事的同伴不得已刷了一天推 ...

  4. Mac电脑如何快速下载YouTube视频

    如果你想下载一些教育类的视频资源,或者是一些学习的教程,那么YouTube是一个很好的视频资源平台.YouTube上面各种各样的资源都有,而且质量都很有保证,尤其是那些订阅量很多的人.可惜的是,You ...

  5. php常用的魔术方法

    __construct:构造函数,一旦创建对象都就会自动调用 __call:当调用了未定义的方法时会自动触发 __set:当给类外部不可访问的属性设置值时会自动触发 __get:当获取类外部不可访问的 ...

  6. JUC——线程同步锁(ReentrantLock)

    ReentrantLock简介 ReentrantLock是一个可重复的互斥锁,又被称为独占锁,可重入的意思是:ReentrantLock锁可以被单个线程多次获取.但是在同一个时间点只能被一个线程锁持 ...

  7. Socket之简单的Unity3D聊天室__TCP协议

    服务器端程序 using System; using System.Collections.Generic; using System.Linq; using System.Net; using Sy ...

  8. JetBrains激活 PyCharm | IntelliJ IDEA | CLion | WebStorm...

    最近,JetBrains的IDE火了起来,身为学Java的人,放弃了Eclipse,选择了Idea,还真有点不舍得呢... 虽然Idea不错(在我看来,比Eclipse好用),但是,人家是收费的呀.. ...

  9. 44 道 JavaScript 难题(JavaScript Puzzlers!)

    JavaScript Puzzlers原文 1. ["1", "2", "3"].map(parseInt) 答案:[1, NaN, NaN ...

  10. 第一章 HTML介绍

    1.1 Html和CSS的关系 学习web前端开发基础技术需要掌握:HTML.CSS.JavaScript语言.下面我们就来了解下这三门技术都是用来实现什么的: 1. HTML是网页内容的载体.内容就 ...