Mail.ruПочтаМой МирОдноклассникиВКонтактеИгрыЗнакомстваНовостиКалендарьОблакоЗаметкиВсе проекты

Помогите решить задачку по программированию

@Ghirardellig Ученик (166), на голосовании 15 часов назад
Ограничение: 1 секунда

Маленький Олежка решил, что ему пора изучать английский язык. Поэтому ему на День рождения подарили обучающий набор кубиков, который можно описать следующим образом:

• на каждом кубике нарисована одна строчная буква английского алфавита
• в наборе обязательно должен быть хотя бы один кубик с буквой «z»
• если в наборе присутствует некоторое количество кубиков с i-й буквой английского алфавита, то кубиков с (i + 1)-й буквой должно быть ровно на один больше


Недавно у Олежки были гости, которые играли с его кубиками, разбросали их, какие-то из них могли затеряться. Олежка выложил все кубики в ряд и задался вопросом: «это все еще похоже на обучающий набор кубиков?» Скорее помогите ему ответить на этот вопрос!

Формат входных данных
В входном файле находится непустая строка S длиной не более 10^5 символов, состоящая только из строчных английских букв — выложенные в ряд кубики.
Формат выходных данных
Выведите «YES» (без кавычек), если кубики, находящиеся перед Олежкой, могут образовать обучающий набор, и «NO» (без кавычек) — если не могут.
Примеры:
xyyzzz
YES
z
YES
abbccc
NO
zyzzy
YES
yzzzz
NO
Голосование за лучший ответ
epifan Мыслитель (6632) 1 месяц назад
 from collections import Counter 

def can_form_learning_set(s):
# Подсчитываем количество каждой буквы
count = Counter(s)

# Проверяем наличие хотя бы одной 'z'
if count['z'] == 0:
return "NO"

# Проверяем последовательность
for i in range(26): # 26 букв в английском алфавите
current_letter = chr(ord('a') + i)
next_letter = chr(ord('a') + i + 1) if i < 25 else None

current_count = count[current_letter]
if next_letter:
next_count = count[next_letter]
# Если текущая буква есть, то следующая должна быть на 1 больше
if current_count > 0 and next_count != current_count + 1:
return "NO"
else:
# Если текущая буква 'z', то просто проверяем, что она есть
if current_count > 0 and current_letter != 'z':
# Если есть буквы до 'z', то 'z' должна быть последней
return "NO"

return "YES"

# Пример использования
s = input().strip()
print(can_form_learning_set(s))
 print(can_form_learning_set("xyyzzz"))  # YES 
print(can_form_learning_set("z")) # YES
print(can_form_learning_set("abbccc")) # NO
print(can_form_learning_set("zyzzy")) # YES
print(can_form_learning_set("yzzzz")) # NO
Похожие вопросы