Назад к вопросам
Ozon Финтех
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"
Компании, где спрашивали
Ответ от нейросети
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();
}
Этот код корректно обрабатывает вложенные конструкции и повторения, как в примерах из условия.