Sobes.tech
Назад к вопросам
Senior
7

Условие Сложность: MEDIUM Дана закодированная строка следующего формата: k[encoded_text] Здесь k — это число повторений строки encoded_text. Строка гарантированно имеет корректный формат: нет лишних пробелов, скобки всегда правильные и т.д. Необходимо декодировать строку Пример: Input: "3[a]2[bc]" Output: "aaabcbc" Input: "3[a2[c]]" Output: "accaccacc" Input: "2[abc]3[cd]ef" Output: "abcabccdcdcdef"

Компании, где спрашивали
Ozon ФинтехOzon Финтех

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

sobes.tech AI

Для декодирования строки формата k[encoded_text] удобно использовать стек. Идея в том, чтобы проходить по символам строки, накапливать числа и строки, а при встрече ] извлекать из стека последний повторяемый блок и число повторений, затем формировать декодированную часть.

Пример решения на Java:

public String decodeString(String s) {
    Stack<Integer> counts = new Stack<>();
    Stack<StringBuilder> resultStack = new Stack<>();
    StringBuilder current = new StringBuilder();
    int k = 0;

    for (char ch : s.toCharArray()) {
        if (Character.isDigit(ch)) {
            k = k * 10 + (ch - '0');
        } else if (ch == '[') {
            counts.push(k);
            resultStack.push(current);
            current = new StringBuilder();
            k = 0;
        } else if (ch == ']') {
            StringBuilder decoded = resultStack.pop();
            int count = counts.pop();
            for (int i = 0; i < count; i++) {
                decoded.append(current);
            }
            current = decoded;
        } else {
            current.append(ch);
        }
    }
    return current.toString();
}

Этот код корректно обрабатывает вложенные конструкции и повторения, как в примерах из условия.