当前位置: 首页 > news >正文

CSP信奥赛新增的算法-马拉车算法(Manacher‘s Algorithm)

适合小学六年级的同学理解马拉车算法(Manacher’s Algorithm),我们会用有趣的故事和简单代码来解释。

一、故事理解:用镜子找宝藏 🔍

假设我们要在字符串中找到最长的回文(正反读都一样的字符串),比如在字符串 S = "abba" 中找最长回文:

  1. 插入分隔符:把字符串变成 T = "#a#b#b#a#"

    • 作用:统一奇偶长度的回文查找
    • 就像在字符之间放镜子,方便反射观察
  2. 维护三个法宝

    • C:当前回文的中心(像灯塔)
    • R:已知回文的最右边界(像地图边界)
    • P[i]:每个位置的回文半径(记录每个点的能量)
  3. 镜面反射技巧

    • 当探测新位置i时,用C的镜像位置mirror = 2*C - i直接复制半径
    • 像用镜子快速复制已知信息,避免重复计算

二、C++代码实现 🖥️

#include <iostream>
#include <vector>
using namespace std;string longestPalindrome(string s) {if (s.empty()) return "";// 1. 插入分隔符(变成奇数长度)string T = "#";for (char c : s) {T += c;T += '#';}int n = T.size();vector<int> P(n, 0); // 每个中心的回文半径int C = 0, R = 0;    // 当前中心和右边界int maxLen = 0, center = 0;for (int i = 0; i < n; i++) {// 2. 找镜像位置,快速获得初始半径int mirror = 2 * C - i;if (i < R) {P[i] = min(R - i, P[mirror]);}// 3. 中心扩展int left = i - (P[i] + 1);int right = i + (P[i] + 1);while (left >= 0 && right < n && T[left] == T[right]) {P[i]++;left--;right++;}// 4. 更新中心和边界if (i + P[i] > R) {C = i;R = i + P[i];}// 5. 记录最大值if (P[i] > maxLen) {maxLen = P[i];center = i;}}// 转换回原字符串位置int start = (center - maxLen) / 2;return s.substr(start, maxLen);
}int main() {string s = "abba";cout << "最长回文子串:" << longestPalindrome(s) << endl;return 0;
}

三、关键步骤图解 🎨

以输入 "abba" 为例:

步骤操作T字符串P数组变化
1插入分隔符#a#b#b#a#初始化全0
2i=1时中心扩展找到半径1P[1]=1
3i=4时发现最长回文半径4(实际长度4)P[4]=4
4转换回原字符串abba最终结果

四、复杂度分析 ⚡

  • 时间复杂度:O(n) → 比暴力法O(n²)快得多
  • 空间复杂度:O(n) → 存储每个位置的半径

关键技巧:通过镜像反射避免重复计算,像用镜子复制已知信息!

相关文章:

  • 初识java
  • git切换分支后需要pull吗
  • cGAS-STING通路
  • 解决 TypeError: unsupported operand type(s) for -: ‘NoneType‘ and ‘float‘ 错误
  • 前端服务器部署分类总结
  • 带直流音量控制的立体声音频功率放大器—D2668
  • 第二十四天打卡
  • 服务器被打了怎么应对
  • Vue3吸顶导航的实现
  • Nginx配置与应用案例详解
  • 每周靶点:STEAP1、NPR1及文献分享
  • 快速定位到源码位置的插件 - vite/webpack
  • 量子算法:开启计算新时代的技术密码
  • Java基础之静态代理和动态代理
  • Excel中批量对多个结构相同的工作表执行操作,可以使用VBA宏来实现
  • HCIP(BFD)
  • 音频生成技术的前沿探索:从语音合成到智能Podcast
  • C# winform 日志 NLog
  • LeetCode 热题 100 230. 二叉搜索树中第 K 小的元素
  • Apollo学习——键盘控制速度
  • 科普|男性这个器官晚到岗,可能影响生育能力
  • 牛市早报|4月新增社融1.16万亿,降准今日正式落地
  • 秘鲁总统任命前司法部长阿拉纳为新总理
  • 盛和资源海外找稀土矿提速:拟超7亿元收购匹克,加快推动坦桑尼亚项目
  • 知名猎头公司创始人兼首席执行官庄华因突发疾病逝世,享年62岁
  • 上海国际电影节纪录片单元,还世界真实色彩