首页
学习
活动
专区
圈层
工具
发布
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    Manacher算法

    说明  给一个字符串str,要求用O(n)的时间复杂度求出其中最长回文子串的长度 实现步骤 基本过程  求最大回文子串的长度一般要看原串的长度是奇数还是偶数,然后分别求得,但Manacher算法的第一个神奇之处就是把两种字符串都化为长度为奇数...: charArr[index++]; return res; }  例如原来是aaaba,变化之后就是#a#a#a#b#a#,无论原来是奇数还是偶数,变化之后都是奇数,方便处理 概念引入  manacher...manacher代码 public static char[] manacherString(String str) { char[] charArr = str.toCharArray();...C = i; } max = Math.max(max,pArr[i]); } return max - 1; } 总结  看到manacher...我想到了另一个算法——kmp,两者最初的方法时间复杂度都是O(n^2^),但是由于通过各种方法,使得有一个参照的东西能够加快进度,时间复杂度变为O(n),比方说kmp里,加速的东西就是next数组,而manacher

    94620

    浅谈 Manacher

    前言: 关于 Manacher,有很多说法。有人说是马拉车,有人说是 Man 拉车。不多说了,本期难度一般,现在开讲。...何为 Manacher: Manacher 算法主要是处理字符串中关于回文串的问题的,它可以在 $\mathcal{O(n)}$ 的时间处理出以字符串中每一个字符为中心的回文串半径,由于将原字符串处理成两倍长度的新串...\ Manacher 算法提供了一种巧妙的办法,将长度为奇数的回文串和长度为偶数的回文串一起考虑,具体做法是,在原字符串的每个相邻两个字符中间插入一个分隔符,同时在首尾也要添加一个分隔符,分隔符的要求是不在原串中出现...P3805 【模板】manacher: 模板题,直接写。...(); w=s+s; add(); int B=manacher(); w=s+s+s; add(); int C=manacher(); cout<<((((B-A+mod

    21020
    领券