Задача со сжатием строки RLE не проходит по памяти и по времени
пишу код под задачу. Краткое описание задачи: Подается строка s в RLE виде. Назовём строку, из которой была получена s строкой t. Вам даны q запросов, каждый из них представлен целыми числами l и r. В каждом запросе вам необходимо найти длину сжатой подстроки t[l...r]. Выведите q чисел, каждое в отдельной строке — ответы на запросы в том порядке, в котором запросы были заданы во входных данных.
x1000000000yz
3
2 1000000001
2 1000000002
5938493 15938493
Собственно я ее решил, но памяти и по времени не проходит Вот мой код решения:
def encode(data):
encoding = ''
prev_char = ''
count = 1
for char in data:
if char != prev_char:
if prev_char and count == 1:
encoding += prev_char
elif prev_char:
encoding += str(count) + prev_char
count = 1
prev_char = char
else:
count += 1
else:
if count == 1:
encoding += prev_char
else:
encoding += str(count) + prev_char
return encoding
def decode(data):
decode = ''
prev_char = ''
count = ''
for char in data:
if char.isdigit():
count += char
elif char.isalpha() and count == '':
decode += char
else:
decode += char * int(count)
count = ''
return decode
s = input()
numbers = [input().split() for _ in range(int(input()))]
n = decode(s)
for i in numbers:
print(len(encode(n[int(i[0])-1:int(i[1])])))
Я еще новичок в программировании. Прошу помочь с оптимизацией, может посмотреть что-нибудь и переписать по-новому. Любую помощь.