还没放假的时候就知道有这么一种算法,之前看了一下以为很难就没好好学,今天早上用心看了一下,发现其实很简单。学什么东西都应该静下心来好好理解好好学,才能保证高效率!


我主要是看这篇博客学的马拉车,我觉得讲的已经够好了,仔细看一遍,应该问题不大。


马拉车其实非常巧妙,确实难以想到这种解决方法,但是学算法不是让你发明,单纯的学习其实还是很简单的。具体的思路可以看上面的链接博客,这里只讲一下核心优化内容。


a b c b e b c b a g

1 2 3 4 5 6 7 8 9 10


上面给出了一个字符串abcdedcba,我们可以发现以e为中心、5为半径的字符是回文字符串,那么我们要求序号为7的最长回文串时,因为回文串的对称原理,并且字符3和字符7在同一回文串的对称位置。它的长度最少是序号为3的最长回文串的长度。

贴上代码:

int R[MAX * 2];
char a[MAX];
char b[MAX * 2];
int main()
{cin >> a;b[0] = '@',b[1] = '#';int len = strlen(a);int ct = 2;for (int i = 0; i < len; i++){b[ct++] = a[i];b[ct++] = '#';}b[ct] = '$';int pos = 0, mx = 0, ans = 0; //pos代表上一次最远半径的中心,mx代表最远半径的位置+1,for (int i = 1; i < ct; i++){if (i < mx)R[i] = min(mx - i, R[2 * pos - i]); //manecher算法核心elseR[i] = 1;while (b[i + R[i]] == b[i - R[i]])R[i]++;if (R[i] + i > mx)pos = i, mx = R[i] + i;ans = max(ans, R[i] - 1);}cout << ans << endl;return 0;
}

manecher算法 最长回文子字符串相关推荐

  1. Java字符串中最长回文子字符串

    Longest palindrome substring in a string is a very common java interview question. To find out the l ...

  2. 快手腾讯校招笔试题最长回文子序

    腾讯2017 给定一个字符串s,你可以从中删除一些字符,使得剩下的串是一个回文串.如何删除才能使得回文串最长呢? 输出需要删除的字符个数. 输入描述: 输入数据有多组,每组包含一个字符串s,且保证:1 ...

  3. Java实现 LeetCode 730 统计不同回文子字符串(动态规划)

    730. 统计不同回文子字符串 给定一个字符串 S,找出 S 中不同的非空回文子序列个数,并返回该数字与 10^9 + 7 的模. 通过从 S 中删除 0 个或多个字符来获得子字符序列. 如果一个字符 ...

  4. python programming training(一):最大回文子字符串

    概念 回文字符串是指一个字符串从左到右与从右到左遍历得到的序列是相同的.例如"abcba"就是回文字符串,而"abcab"则不是回文字符串. 回文字符串给定一个 ...

  5. 算法62---最长回文子序列长度(子串)、回文子序列总共个数(子串)【动态规划】...

    参考链接:https://www.cnblogs.com/AndyJee/p/4465696.html 一.题目:最长回文子序列长度 给定字符串,求它的最长回文子序列长度.回文子序列反转字符顺序后仍然 ...

  6. 马拉车(manacher)算法——最长回文(hdu3068)

    题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=3068 题目描述: Problem Description 给出一个只由小写英文字符a,b,c...y ...

  7. manacher算法--最长回文子串

    问题概述:输入一个字符串,输出它的最长回文子串 输入样例:                             对应输出: abbaabcba                            ...

  8. 中心扩散算法--最长回文子串

    这篇看一下中心扩散算法. 输入: "babad" 输出: "bab" 注意: "aba" 也是一个有效答案. 示例 2:输入: " ...

  9. LeetCode 1771. 由子序列构造的最长回文串的长度(最长回文子序)

    文章目录 1. 题目 2. 解题 1. 题目 给你两个字符串 word1 和 word2 ,请你按下述方法构造一个字符串: 从 word1 中选出某个 非空 子序列 subsequence1 . 从 ...

最新文章

  1. 十、调度算法----时间片轮转、优先级调度、多级反馈队列
  2. Java中主线程如何捕获子线程抛出的异常
  3. 错把一加当苹果,美国海关侵权大案糗大了:被网友无情嘲讽
  4. 【NLP】万字梳理!BERT之后,NLP预训练模型发展史
  5. 电子产品设计流程_指纹锁生产的八大工序流程
  6. 什么镜头最适合拍风景_哪种镜头最适合你的街头摄影?
  7. Win2003下架构Mrtg服务器
  8. 一个关于 TensorFlow 的悲剧故事
  9. spring cloud微服务注册中心EurekaServer
  10. C++设计模式之Strategy(策略模式)
  11. 微信小程序官方demo下载地址
  12. Windows下使用platform.pk8 和platform.x509.pem生成jks签名文件
  13. 兔子数列规律怎么讲_“兔子数列”的秘密
  14. 英语语法基础03(长难句)
  15. 各种智能跟随定位技术解剖
  16. idea使用小技巧(一)
  17. java的方法decompress_Java LZ4SafeDecompressor.decompress方法代码示例
  18. 洛谷P3975 - [TJOI2015]弦论
  19. 2021-10-20-Flask-02 路由与参数解析
  20. 流利阅读12.20 Angry young women: A new generation of activists is challenging misogyny

热门文章

  1. Windows下使用VNC连接CentOS7远程桌面
  2. 如何评价模型的好坏?
  3. LumaQQ与IP查询二(转)
  4. Arduino 负温度系数热敏电阻(NTC)测温
  5. vs2022 编译libmodbus源码
  6. Markdown表格—合并单元格—设置单元格颜色
  7. 微信公众号开发之内网渗透
  8. 第十八篇,Simulink with Git
  9. JavaScript-请把用户输入的不规范的英文名字,变为首字母大写,其他小写的规范名字
  10. python游戏编程入门免费_python游戏编程入门 python游戏编程入门课