因为非关键字母对回文没有影响,所以直接全部替换成相同字母,问题转化成了给定一个字符串求最长回文子串,直接Manacher即可
c++
#include <bits/stdc++.h>
using namespace std;
char s[100005]; // 原始字符串
char t[300005]; // 转换后的字符串,包含分隔符
给定一个长度为 n 的字符串 s,字符串仅由小写英文字母组成。定义“关键字母”集合 K={a,e,i,o,u},其余字母称为“非关键字母”。
对于一个子串,如果对于子串中的每一个位置 i,若该位置的字符属于关键字母,则其关于子串中心对称的位置上的字符必须与该位置字符相同;若该位置属于非关键字母,则没有此限制。我们称满足该条件的子串为“弹性回文子串”。请你找出 s 中最长的弹性回文子串,并输出其长度。
字符串的长度 n 满足 1≤n≤105,且字符串仅包含小写英文字母。
第一行包含一个整数 n (1≤n≤105),表示字符串的长度。 第二行包含一个长度为 n 的字符串 s,仅由小写英文字母组成。
Scan the QR code below with WeChat to sign in
First-time scan will create your account automatically
请使用微信扫描下方二维码完成注册