Ctrl K

Проверка многобайтового потока

Средняя
По сети пришёл поток байтов octets: каждый элемент — число от 0 до 255, то есть ровно один байт. Проверьте, что поток корректно записан в кодировке UTF-8, то есть целиком разбивается на символы по таким правилам. Символ занимает от 1 до 4 байт: | Байт в символе | Двоичная запись | |---|---| | 1 | 0xxxxxxx | | 2 | 110xxxxx 10xxxxxx | | 3 | 1110xxxx 10xxxxxx 10xxxxxx | | 4 | 11110xxx 10xxxxxx 10xxxxxx 10xxxxxx | Здесь x — любой бит. Иначе говоря, первый байт символа из k байт (k ≥ 2) начинается с k единиц и нуля, а каждый из остальных k − 1 байт начинается с 10. Однобайтовый символ начинается с 0. Других вариантов нет; смысл самих символов проверять не нужно. Верните True, если поток корректен, и False иначе.
Пример 1
octets=[226, 130, 172, 65] → True

226 = 11100010 — начало символа из трёх байт; 130 = 10000010 и 172 = 10101100 — правильные продолжения. 65 = 01000001 — однобайтовый символ. Поток корректен.

Пример 2
octets=[195, 65] → False

195 = 11000011 обещает символ из двух байт, но следующий байт 65 = 01000001 не начинается с 10.

Пример 3
octets=[128] → False

128 = 10000000 — байт-продолжение, а символ с него начинаться не может.

Ограничения
  • 1 ≤ octets.length ≤ 2·10⁴
  • 0 ≤ octets[i] ≤ 255
Встречал эту задачу на настоящем собесе?
Решили0
Пробовали0
Отправок0
Принято—
Темы
Похожие задачиВсе наборы добавок СредняяВсе разные наборы карт СредняяЛишний среди троек СредняяДва числа без пары СредняяНайти лишнюю копию Средняя
загружаем Python…
Вход
octets=[226, 130, 172, 65]
Ожидается
True

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