Задача на проверку строк , python, код выдает неверный ответ

Рейтинг: 1Ответов: 3Опубликовано: 13.08.2023

я написала код по следующей задаче:

ограничение по времени на тест 2 секунды
ограничение по памяти на тест 256 мегабайт

Витя начал учить берляндский язык. Известно, что 
в Берляндии используют латинский алфавит. Буквы 
«a», «o», «u», «i» и «e» являются гласными. 
Остальные буквы — согласные.

В берляндском языке после каждой согласной буквы 
обязательно идёт гласная буква, а после гласной — 
может идти любая. Единственным исключением является 
согласная буква «n» — после неё может идти любая 
буква (не только гласная), а может и не идти буква 
вообще. Например, слова «harakiri», «yupie», «man» 
и «nbo» являются берляндскими, а слова «horse», 
«king», «my» и «nz» — нет.

Помогите Вите понять, является ли слово s
берляндским.

Входные данные
Первая строка входных данных содержит строку s, 
состоящую из |s|(1≤|s|≤100) строчных 
латинских букв.

Выходные данные
Выведите «YES» (без кавычек), если идет гласная 
после каждой согласной кроме «n», иначе выведите «NO».

Вы можете выводить каждую из букв в любом регистре 
(строчную или заглавную).

Примеры

входные данные
sumimasen
выходные данные
YES

входные данные
ninja
выходные данные
YES

входные данные
codeforces
выходные данные
NO

Примечание
В первом и втором примерах после каждой согласной 
кроме «n» идёт гласная, поэтому слово является 
берляндским.

В третьем примере после согласной «r» идёт другая 
согласная «c», а согласная «s» стоит в конце, 
поэтому слово не является берляндским.

Написала по ней код:

def solve(s): 
    q=["a", "o", "u", "i", "e"] 
    for i in range(len(s)-1):
        if (s[i] not in q) and (s[i]!="n") and (s[i+1] not in q):
            return "NO" 
    return "YES"
s=input() 
print(solve(s))

Но на нескольких тестах проверяющей системы (Codeforces) он выдаёт неверный ответ, помогите пожалуйста исправить код!!!

Ответы

▲ 2Принят

Вы пропустили проверку того, что последняя буква - либо гласная, либо 'n'. Вот исправленная версия:

def solve(s): 
    q=["a", "o", "u", "i", "e"] 
    for i in range(len(s) - 1):
        if (s[i] not in q and s[i + 1] not in q and s[i] != 'n'):
            return "NO"
    if s[-1] not in (q + ['n']):
        return 'NO'
    return "YES"
s=input() 
print(solve(s))
▲ 2

Проверил на codeforces, все работает

Да, у вас нет проверки что последняя буква должна быть гласной, либо не n

def solve(s): 
    q=["a", "o", "u", "i", "e"]
    for i in range(len(s)-1):
        if (s[i] not in q) and (s[i]!="n") and (s[i+1] not in q):
            return "NO"
    if (s[-1] not in q and s[-1] != "n"):
        return "NO"
    return "YES"
s=input() 
print(solve(s))
▲ 0
import re

print(
    'YES' 
    if re.match(
        r'^([^aouien][aouie]|n.?)+$', 
        input()
    ) else 'NO'
)

Ну вот так как-то с регулярками. Вроде ничего не упустил