Ctrl K

Проверка разметки

Сложная
Дан фрагмент разметки snippet. Верните true, если он корректен по следующим правилам, и false иначе. - **Имя тега** — от 1 до 9 заглавных латинских букв. - **Открывающий тег** — <ИМЯ>, **закрывающий** — </ИМЯ>. Каждый символ < (кроме начала сырого блока) начинает тег, и всё до ближайшего следующего > считается его именем (после / для закрывающего). Если > нет или имя недопустимо, фрагмент некорректен. - **Элемент** — открывающий тег, содержимое и закрывающий тег с тем же именем. Содержимое может включать произвольный текст, другие элементы и сырые блоки; теги должны быть правильно вложены. - **Сырой блок** начинается с <![CDATA[ и заканчивается на первом последующем ]]>. Всё внутри — обычный текст, даже если похоже на теги. Блок без ]]> делает фрагмент некорректным. - Весь фрагмент целиком должен быть **ровно одним элементом**: никакого текста, блоков или других элементов до или после него. Символ > вне тегов — обычный текст.
Пример 1
snippet='<NOTE>buy milk <B>today</B></NOTE>' → True

Внешний тег NOTE закрыт, внутри — текст и правильно вложенный тег B.

Пример 2
snippet='<P><![CDATA[<a> is not a tag]]></P>' → True

Всё между <![CDATA[ и ]]> — обычный текст, поэтому <a> с недопустимым именем ничего не ломает.

Пример 3
snippet='<A><B></A></B>' → False

Теги пересекаются: A закрывается раньше вложенного в него B.

Ограничения
  • 1 ≤ len(snippet) ≤ 500
  • snippet состоит из латинских букв, цифр, пробелов и символов <, >, /, !, [, ], .
Встречал эту задачу на настоящем собесе?
Решили0
Пробовали0
Отправок0
Принято—
Темы
Похожие задачиСамый длинный сбалансированный отрезок скобок СложнаяКалькулятор со скобками: плюс и минус СложнаяРасчистить ряд шариков СложнаяПодсчёт элементов в формуле СложнаяКалькулятор со скобками и переменными Сложная
загружаем Python…
Вход
snippet='<NOTE>buy milk <B>today</B></NOTE>'
Ожидается
True

«Запустить» — первые 3 теста у тебя в браузере, «Отправить» — все 218 тестов на сервере, включая скрытые.