未分类

最长元音回文子串

2025年10月18日 liang 2 min read

描述

小牛有一个长度为n的字符串s,字符串仅包含小写英文字符。 定义元音字母为{a,e,i,o,u},其他字母为辅音字母。 请你在s中找到一个最长的元音回文子串,只需要输出其长度。 子串是指从原字符串中,选择一段连续的字符组成的新字符串。 一个长度为m的元音回文串t是指,对于任意i∈[1,m],如果t是元音,则需满足 ​;如果ti​是辅音,那么没有额外限制。


输入

第一行输入一个整数n(1≤n≤10^5),代表字符串的长度。 第二行输入一个长度为n且仅由小写英文字母组成的字符串s。

输出

在一行上输出一个整数,代表最长的元音回文串的长度。


输入1

5
abaeb

输出1

3

输入2

6
cccccc

输出2

6

python代码

def is_vowel(c):
    return c in "aeiou"


def expand_from_center(s, left, right):
    while left >= 0 and right < len(s):
        if (is_vowel(s[left]) or is_vowel(s[right])) and s[left] != s[right]:
            break
        left -= 1def is_vowel(c):
    return c in "aeiou"


def expand_from_center(s, left, right):
    while left >= 0 and right < len(s):
        if (is_vowel(s[left]) or is_vowel(s[right])) and s[left] != s[right]:
            break
        left -= 1
        right += 1
    # (right - 1) - (left + 1) + 1
    return right - left - 1


if __name__ == '__main__':
    n = int(input())
    s = input()
    max_length = 0
    for i in range(n):
        odd_length = expand_from_center(s, i, i)
        max_length = max(max_length, odd_length)
        if i < n - 1:
            even_length = expand_from_center(s, i, i + 1)
            max_length = max(max_length, even_length)
    print(max_length)

        right += 1
    # (right - 1) - (left + 1) + 1
    return right - left - 1


if __name__ == '__main__':
    n = int(input())
    s = input()
    max_length = 0
    for i in range(n):
        odd_length = expand_from_center(s, i, i)
        max_length = max(max_length, odd_length)
        if i < n - 1:
            even_length = expand_from_center(s, i, i + 1)
            max_length = max(max_length, even_length)
    print(max_length)

Leave a comment