Кодирование строки методом RLE

Считайте длину каждой последовательной серии и записывайте букву с числом, если оно больше единицы. В примере опечатка: rle('AAAAB') должно возвращать 'A4B', не 'A3B'.

Короткий ответ

Что ответить на собеседовании

Считайте длину каждой последовательной серии и записывайте букву с числом, если оно больше единицы. В примере опечатка: rle('AAAAB') должно возвращать 'A4B', не 'A3B'.

Подробный разбор

Ответ с пояснениями

Условие

Дана строка, состоящая из заглавных латинских букв A‑Z, например: "AAAABBBCCXYZDDDEEFFFFAAAAAAABBBBBBBBBBBBBBBBBBBBBBBBBBB". Требуется реализовать функцию rle, которая преобразует её в форму, где подряд идущие одинаковые символы заменяются символом и количеством их повторений. Результат для приведённого примера должен выглядеть так: "A4B3C2XYZDAE3F3 328".

Важно:

  1. Если символ встречается единожды, он оставляется без изменений.
  2. Если символ повторяется более одного раза, к нему сразу же добавляется число его повторений.
 function rle(str) {
    // your code here
}

rle('A') // A
rle('AAAAB') // A3B
rle('ABCCC') // ABC3

Напишите реализацию, учитывающую указанные правила.

Ответ

Считайте длину каждой последовательной серии и записывайте букву с числом, если оно больше единицы. В примере опечатка: rle('AAAAB') должно возвращать 'A4B', не 'A3B'.

function rle(str) {
  if (!/^[A-Z]*$/.test(str)) throw new Error('Ожидаются буквы A-Z');
  const result = [];
  for (let start = 0; start < str.length;) {
    let end = start + 1;
    while (end < str.length && str[end] === str[start]) end++;
    const count = end - start;
    result.push(str[start] + (count > 1 ? String(count) : ''));
    start = end;
  }
  return result.join('');
}

Одиночные X, Y, Z остаются без цифр; пустая строка даёт пустую строку. Длинный ожидаемый результат в условии также повреждён и противоречит правилу серий. Время O(n), память O(n) на результат.

ИИ-помощник для собеседований

Хочешь уверенно проходить собеседования?

Попробуй ИИ-помощник для собеседований: слышит вас и собеседника, анализирует экран, подсказывает ответы в реальном времени, работает без VPN и не попадает в захват экрана.

Подробнее