Sobes.tech
Назад к вопросам
Middle
5

Нужно посчитать количество подряд идущих символов, но с сохранением порядка появления уникальных символов function countSymbols(str){ const alphabet = new Map(); for (const ch of str) { alphabet.set(ch, alphabet.get(ch) ? alphabet.get(ch) + 1 : 1) } return }

Компании, где спрашивали
Ростелеком

Ответ от нейросети

sobes.tech AI

Чтобы посчитать количество подряд идущих символов с сохранением порядка появления уникальных символов, нужно пройти по строке и считать длину каждой последовательности одинаковых символов подряд. Например, для строки "aaabbc" результат будет: a:3, b:2, c:1.

Вот пример реализации функции:

function countSymbols(str) {
  const result = new Map();
  let prevChar = null;
  let count = 0;

  for (const ch of str) {
    if (ch === prevChar) {
      count++;
    } else {
      if (prevChar !== null) {
        result.set(prevChar, (result.get(prevChar) || 0) + count);
      }
      prevChar = ch;
      count = 1;
    }
  }

  // Добавляем последний символ
  if (prevChar !== null) {
    result.set(prevChar, (result.get(prevChar) || 0) + count);
  }

  return result;
}

// Пример использования:
const counts = countSymbols("aaabbcaaa");
for (const [char, cnt] of counts) {
  console.log(`${char}: ${cnt}`);
}
// Выведет:
// a: 6
// b: 2
// c: 1

В этом коде мы аккумулируем количество подряд идущих символов и суммируем их для каждого уникального символа, сохраняя порядок появления в Map.