Здравствуйте! Нужна помощь с пониманием задачи. Задача:
Дана строка, состоящая из букв латинского алфавита. В целях ее компрессии разрешается любые ее непустые подстроки (подстрокой называется последовательность идущих подряд символов строки) сжимать по следующему правилу. Строка A, состоящая из повторений некоторой непустой строки B, записывается как символ «(», затем количество повторений (целое число от 1 до 105, записанное без ведущих нулей), затем строка B, и, наконец, символ «)». Например, строку ababab можно сжать, записав ее как (3ab).
В данной задаче допускается повторное сжатие подстрок строки. Разумеется, можно сжимать лишь части, состоящие только из букв латинского алфавита. Например, строку acacacaacacaca можно сжать, записав ее в виде (2acacaca), и осуществить дальнейшую компрессию: (2(3ac)a).
Ваша задача осуществить обратное преобразование, то есть преобразовать строку из сжатого вида в несжатый.
Входные данные
Во входном файле записана непустая строка в сжатом виде. Длина строки не превосходит 1000 символов.
Выходные данные
Выведите результат декомпрессии строки. Гарантируется, что длина ответа не превосходит 105 символов. Заметим, что в результате декомпрессии длина строки может уменьшиться.
У меня вопрос по поводу условия о уменьшении длины в результате декомпрессии. Когда такое может быть?
Так же я написал код, но он проходит не все тесты:
string = input()
#(3(2aba)) > (3abaaba) > (abaabaabaabaabaaba)
latest_close = string.rfind(')')
first_close = string.find(')')
latest_start = string.rfind('(')
def find_cnt(s):
i = 0
digit = ''
while s[i].isdigit():
digit += s[i]
i += 1
repeat = s[i:]
return int(digit), repeat
while string.rfind(')') != -1:
count, repeat = find_cnt(string[latest_start+1:first_close])
repeated = ''
for _ in range(count):
repeated += repeat
new_string = string[:latest_start] + repeated + string[first_close + 1:]
string = new_string
latest_close = string.rfind(')')
first_close = string.find(')')
latest_start = string.rfind('(')
print(string)
Прошу помощи в данных вопросах. Спасибо.