题目链接

描述

【题解】

[一个讲得比较好的博客地址](https://www.cnblogs.com/lykkk/p/10460087.html);
感觉manacher算法的大概思路就是利用回文串左右对称的性质。
利用之前算出来的以某个点为中心的回文串。而当前要枚举的串被包括在其中。
则可以用左半部分的结果来获取右边当前的串的结果。
O(N)
当然也可以枚举中间点在哪个地方然后O(N^2)求。

【代码】

  1. class Solution {
  2. public:
  3. const int N = 1000;
  4. string getSpecialString(string s){
  5. string temp = "#";
  6. int len = s.size();
  7. for (int i = 0;i < len;i++){
  8. temp = temp + s[i];
  9. temp = temp + "#";
  10. }
  11. return temp;
  12. }
  13. string longestPalindrome(string s) {
  14. int p[N*2+10];
  15. memset(p,0,sizeof p);
  16. s = getSpecialString(s);
  17. int ma = -1,id = -1;
  18. int len = s.size();
  19. for (int i = 0;i < len;i++){
  20. if (i>ma){
  21. p[i] = 1;
  22. }else{//i<=ma
  23. //这种情况里面也有可以继续扩展的情况
  24. p[i] = min(ma-i+1,p[2*id-i]);
  25. }
  26. while (i-p[i]>=0 && i+p[i]<len && s[i-p[i]]==s[i+p[i]]){
  27. if (i+p[i]>ma){//更新最右边界
  28. ma = i+p[i];
  29. id = i;
  30. }
  31. p[i]++;
  32. }
  33. }
  34. int ansindex = 0;
  35. for (int i = 1;i < len;i++)
  36. if (p[ansindex]<p[i]){
  37. ansindex = i;
  38. }
  39. string t = "";
  40. for (int i = ansindex-p[ansindex]+1;i<=ansindex+p[ansindex]-1;i++){
  41. if (s[i]!='#'){
  42. t+=s[i];
  43. }
  44. }
  45. return t;
  46. }
  47. };

【LeetCode 5】 最长回文子串的更多相关文章

  1. LeetCode:最长回文子串【5】

    LeetCode:最长回文子串[5] 题目描述 给定一个字符串 s,找到 s 中最长的回文子串.你可以假设 s 的最大长度为1000. 示例 1: 输入: "babad" 输出: ...

  2. 【LeetCode】最长回文子串【动态规划或中心扩展】

    给定一个字符串 s,找到 s 中最长的回文子串.你可以假设 s 的最大长度为 1000. 示例 1: 输入: "babad"输出: "bab"注意: " ...

  3. Java实现 LeetCode 5 最长回文子串

    5. 最长回文子串 给定一个字符串 s,找到 s 中最长的回文子串.你可以假设 s 的最大长度为 1000. 示例 1: 输入: "babad" 输出: "bab&quo ...

  4. [LeetCode] 5. 最长回文子串 ☆☆☆(最长子串、动态规划)

    最长回文子串 (动态规划法.中心扩展算法) https://leetcode-cn.com/problems/longest-palindromic-substring/solution/xiang- ...

  5. 【LeetCode】最长回文子串-中心扩展法

    [问题]给定一个字符串 s,找到 s 中最长的回文子串.你可以假设 s 的最大长度为 1000. 示例 : 输入: "babad" 输出: "bab" 注意: ...

  6. leetcode python最长回文子串

    回文的意思是正着念和倒着念一样,如:上海自来水来自海上,雾锁山头山锁雾,天连水尾水连天 给定一个字符串 s,找到 s 中最长的回文子串.你可以假设 s 的最大长度为 1000. 示例 1: 输入: & ...

  7. [LeetCode] 5. 最长回文子串

    题目链接:https://leetcode-cn.com/problems/longest-palindromic-substring/ 题目描述: 给定一个字符串 s,找到 s 中最长的回文子串.你 ...

  8. LeetCode 05 最长回文子串

    题目 给定一个字符串 s,找到 s 中最长的回文子串.你可以假设 s 的最大长度为 1000. 示例 1: 输入: "babad" 输出: "bab" 注意: ...

  9. 【LeetCode】最长回文子串-动态规划法

    [问题]给定一个字符串 s,找到 s 中最长的回文子串.你可以假设 s 的最大长度为 1000. 示例 : 输入: "babad" 输出: "bab" 注意: ...

  10. [leetCode]5. 最长回文子串(DP)

    题目 给定一个字符串 s,找到 s 中最长的回文子串.你可以假设 s 的最大长度为 1000. 题解 dp.先初始化长度为1和长度为2的串.再依次算长度为3,4,5.... 当找到回文串时,若长度比当 ...

随机推荐

  1. Delphi UTF编码 UTF8Encode、UTF8Decode、URLEncode、URLDecode

    一.URL简介    URL是网页的地址,比如 http://www.cnblogs.com.Web 浏览器通过 URL 从 web 服务器请求页面.    由于URL字符串常常会包含非ASCII字符 ...

  2. Delphi ini文件结构简介

    一.INI文件的结构:; 注释[小节名]关键字=值 INI文件允许有多个小节,每个小节又允许有多个关键字, “=”后面是该关键字的值. 值的类型有三种:字符串.整型数值和布尔值.其中字符串存贮在INI ...

  3. URAL 1057 Amount of Degrees (数位dp)

    Create a code to determine the amount of integers, lying in the set [X;Y] and being a sum of exactly ...

  4. Springboot与jsp使用404错误

    未加依赖包时出现:Did not find handler method for [/WEB-INF/views/login.jsp] 加入下面依赖包: <dependency> < ...

  5. jquery+javascript触发a标签的点击事件

    今天项目经理跟我说window.open()在一些浏览器上会被拦截,当时的解决方案是:用a标签的target="_blank"属性也可以打开窗体页面 于是解决了A问题出现了B问题: ...

  6. HTML5 开发技能图谱skill-map

    # HTML5 开发技能图谱![HTML5 脑图](https://github.com/TeamStuQ/skill-map/blob/master/data/designbyStuQ/png-HT ...

  7. 用 Flask 来写个轻博客 (6) — (M)VC_models 的关系(one to many)

    Blog 项目源码:https://github.com/JmilkFan/JmilkFan-s-Blog 目录 目录 前文列表 扩展阅读 前言 一对多 再一次 sync db How to use ...

  8. 基于nodejs的一个实时markdown转html工具小程序

    1.版本一 - 1.1`npm install marked --save` 安装markdwon转html的包.- 1.2 使用watchFile监视 markdown文件 /** * Create ...

  9. ORACLE切非归档模式:

    C:\Documents and Settings\Administrator>sqlplus /nologSQL> conn / as sysdbaConnected to an idl ...

  10. dubbo超时原理以及解决方案

    dubbo超时原理以及解决方案 本篇主要记录dubbo中关于超时的常见问题,实现原理,解决的问题 超时问题 为了检查对dubbo超时的理解,尝试回答如下几个问题,如果回答不上来或者不确定那么说明此处需 ...