news 2026/7/28 17:46:29

Manacher算法

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Manacher算法

可以在时间复杂度为O(n)的情况下求解一个字符串的最长回文子串长度
在进行Manacher算法时,字符串都会进行上面的进入一个字符处理,比如输入的字符为acbbcbds,用“#”字符处理之后的新字符串就是#a#c#b#b#c#b#d#s#
回文半径数组radius是用来记录以每个位置的字符为回文中心求出的回文半径长度,如下图所示,对于p1所指的位置radius[6]的回文半径是5,每个位置的回文半径组成的数组就是回文数组,所以#a#c#b#b#c#b#d#s#的回文半径数组为[1, 2, 1, 2, 1, 2, 5, 2, 1, 4, 1, 2, 1, 2, 1, 2, 1]
最右回文右边界指的是这个位置及之前的位置的回文子串,所到达的最右边的地方。

  1. 第一种可能性
  2. 第二种可能性
  3. 第三种可能性

代码实现

public class Manacher { public static char[] manacherString(String str) { StringBuilder sb = new StringBuilder(); for (int i = 0; i < str.length(); i++) { sb.append("#"); sb.append(str.charAt(i)); } sb.append("#"); return sb.toString().toCharArray(); } public static int manacher(String str) { if (str == null || str.length() < 1) { return 0; } char[] charArr = manacherString(str); int[] radius = new int[charArr.length]; int R = -1; int c = -1; int max = Integer.MIN_VALUE; for (int i = 0; i < radius.length; i++) { radius[i] = R > i ? Math.min(radius[2 * c - i], R - i + 1) : 1; while (i + radius[i] < charArr.length && i - radius[i] > -1) { if (charArr[i - radius[i]] == charArr[i + radius[i]]) { radius[i]++; } else { break; } } if (i + radius[i] > R) { R = i + radius[i] - 1; c = i; } max = Math.max(max, radius[i]); } return max - 1; } public static void main(String[] args) { // String str = "abcdcbafabcdck"; String str = "bcbbcbds"; System.out.println(manacher(str)); } }
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/7/28 17:45:57

luogu P4881 hby与tkw的基情

背景&#xff1a; 博客还有好多没写&#xff0c;看看这个周日有空吗。 题目传送门&#xff1a; https://www.luogu.org/problem/P4881 题意&#xff1a; 求&#xff1a;ans∑i1ni⋅fi[nmod&ThinSpace;&ThinSpace;2]ans\sum_{i1}^{n}i\cdot f_i[n\mod 2]ans∑i…

作者头像 李华
网站建设 2026/7/28 17:45:32

二维码识别-条形码识别-条形码OCR接口介绍

前言 传统扫码硬件部署成本偏高&#xff0c;普通手机本地拍照解码极易受画面倾斜、反光、污渍、模糊等问题干扰&#xff0c;经常出现识别失败的情况。本接口兼容市面全部主流一维码、二维码格式解析&#xff0c;支持图片 URL、Base64 两种文件提交形式&#xff0c;依托图像增强…

作者头像 李华
网站建设 2026/7/28 17:43:46

在Oracle VM VirtualBox上 安装Ubuntu 16.04

首先 这是安装Ubuntu16.04需要的Ubuntu镜像源 链接&#xff1a;https://pan.baidu.com/s/1DjBwZO1qO4BSApJgSE0NEA 提取码&#xff1a;aho2 复制这段内容后打开百度网盘手机App&#xff0c;操作更方便哦 虚拟机软件可以上官网下载 https://www.virtualbox.org/wiki/Downloads …

作者头像 李华
网站建设 2026/7/28 17:41:30

2026国考备考工具评测与组合策略

1. 考公备考工具现状与选择困境 2026年国考备战季已经悄然拉开帷幕&#xff0c;备考工具的选择成为考生们面临的第一个关键决策。在这个信息爆炸的时代&#xff0c;各类考公APP层出不穷&#xff0c;但真正能帮助考生高效备考的却屈指可数。作为经历过三次公考最终成功上岸的过来…

作者头像 李华
网站建设 2026/7/28 17:39:59

Nintendo Switch大气层系统:开启游戏主机无限潜能的终极解决方案

Nintendo Switch大气层系统&#xff1a;开启游戏主机无限潜能的终极解决方案 【免费下载链接】Atmosphere-stable 大气层整合包系统稳定版 项目地址: https://gitcode.com/gh_mirrors/at/Atmosphere-stable 想要让你的Nintendo Switch游戏体验更上一层楼吗&#xff1f;A…

作者头像 李华