Закодированная строка

Закодированная строка


Ответ:

const decodeString = (s) => {
  const replace = (str) =>
    /\[+/.test(str)
      ? replace(
          str.replace(/(\d+)\[(\w+)\]/, (_, num, group) => group.repeat(num))
        )
      : str;

  return replace(s);
};

Объяснение:

Создаём рекурсивную функцию replace, которая проверяет, есть ли в переданной строке открывающая скобка [ . Если она есть,вызывает себя же, перед этим заменив в строке все группы с нулевой вложенностью. ( например, есть строка 3[a2[c]]] - в этой строке группа с нулевой вложенностью это 2[c].) Если скобок в строке нет, возвращает переданную строку.

Код для проверки:

const decodeString = (s) => {
  const replace = (str) =>
    /\[+/.test(str)
      ? replace(
          str.replace(/(\d+)\[(\w+)\]/, (_, num, group) => group.repeat(num))
        )
      : str;

  return replace(s);
};

console.log(decodeString('3[a]2[bc]')); // 'aaabcbc'

console.log(decodeString('3[a2[c]]')); // 'accaccacc'

console.log(decodeString('2[abc]3[cd]ef')); // 'abcabccdcdcdef'

console.log(decodeString('abc3[cd]xyz')); // 'abccdcdcdxyz'




Report Page