🎉 恭喜! 🎉
你出色地完成了任务!这是一个不小的挑战,但你找到了正确答案。你离编程大师又近了一步!继续保持,每一步都让你更强大。
你将获得一个按照特定规则“打包”的字符串:k[子串] 表示方括号内的子串 恰好重复k 次。数字k 始终是一个正整数。你的任务是——"解包"初始字符串。
注意,字符串可以相互嵌套。例如,3[a2[c]] 表示字符串a2[c] 重复3次。首先需要解包内部部分2[c] 得到cc,然后将其代入a... 中得到acc,最后将acc 重复3次得到accaccacc。
一行无空格的字符串,包含小写拉丁字母、数字以及方括号 [ 和 ]。保证输入字符串始终正确(没有未闭合的括号,数字始终位于左括号前等)。
一行 — 完全解包的结果。
3 [a] 2 [bc]
aaabcbc
def unpack_string(s: str) -> str:
"""
Распаковывает строку вида k[substring], включая вложенные структуры.
"""
stack = []
current_num = 0
current_string = ''
for char in s:
if char.isdigit():
# Собираем число, если оно многозначное (например, 10, 12)
current_num = current_num * 10 + int(char)
elif char == '[':
# Начало новой подстроки. Сохраняем текущее состояние в стек.
# Сохраняем текущую строку и число-повторитель для нее.
stack.append(current_string)
stack.append(current_num)
# Сбрасываем переменные для нового уровня вложенности.
current_string = ''
current_num = 0
elif char == ']':
# Конец подстроки. Достаем из стека предыдущее состояние.
num = stack.pop()
prev_string = stack.pop()
# Формируем новую текущую строку, повторяя распакованный фрагмент
# и добавляя его к строке предыдущего уровня.
current_string = prev_string + current_string * num
else:
# Просто добавляем букву к текущей строке.
current_string += char
return current_string
input_string = input()
result = unpack_string(input_string)
print(result)
🎉 恭喜! 🎉
你出色地完成了任务!这是一个不小的挑战,但你找到了正确答案。你离编程大师又近了一步!继续保持,每一步都让你更强大。
AD
广告
正在运行代码...