字符串manacher算法
Manacher算法是用于在O(n)时间复杂度内查找字符串中最长回文子串的高效算法。以下是详细的技术解析:
一、算法核心思想
- 中心扩展优化:利用回文的对称性避免重复计算
- 奇偶统一处理:通过插入特殊字符将奇偶长度回文统一处理
- 动态维护边界:记录当前已知最右回文边界及其对应的中心
二、关键数据结构
vector<int> radius; // 存储每个位置的回文半径
int center = 0; // 当前中心点
int right = 0; // 当前最右边界
三、算法步骤详解
-
预处理字符串(示例:原字符串"abba"):
string preProcess(string s) { string res = "^#"; for(char c : s) { res += c; res += '#'; } res += "$"