因为辅音对回文没有影响,所以直接全部替换成相同字母,问题转化成了给定一个字符串求最长回文子串,直接Manacher即可
c++
#include <bits/stdc++.h>
using namespace std;
char s[100005]; // 原始字符串
char t[300005]; // 转换后的字符串,包含分隔符
int p[200005]; // 存储每个字符为中心的回文半径
小红有一个长度为n的字符串s,字符串仅包含小写英文字符。 定义元音字母为a,e,i,o,u,其他字母为辅音字母。 请你在s中找到一个最长的元音回文子串,只需要输出其长度。 子串是指从原字符串中,选择一段连续的字符组成的新字符串。 一个长度为m的元音回文串t是指,对于任意i∈[1,m],如果t是元音,则需满足;如果是辅音,那么没有额外限制。
第一行输入一个整数n(1≤n≤105),代表字符串的长度。 第二行输入一个长度为n且仅由小写英文字母组成的字符串s
在一行上输出一个整数,代表最长的元音回文串的长度。
输入
5
abaeb
输出
3
说明
对于区间[1,3],s1和s3位置对称,并且字符相等,符合题意。 对于区间[1,4],s2和s3位置对称,至少有一个元音,但是字符不相等,不符合题意。 对于区间[2,5],s3和s4位置对称,至少有一个元音,但是字符不相等,不符合题意。
输入
6
cccccc
输出
6
说明
元音回文串可以只包含辅音,此时没有任何限制。