N-итераций строки - PullRequest
       1

N-итераций строки

0 голосов
/ 22 июня 2019

У меня есть строка s. Я беру все четные символы строки s и толкаю их вперед, а все нечетные символы идут назад. Затем я объединяю строку s.

Теперь я хочу сделать это N-times, однако код, который я использую, с треском проваливается для длинных строк и N превышает миллиард.

def n_iters(s, n):
    for i in range(n):
        s = s[::2] + s[1::2]
    return s

Есть идеи, как это оптимизировать?

Примером, для которого код не выполняется, будет строка s длиной 8000000 и N = 100000000.

1 Ответ

0 голосов
/ 01 июля 2019

Оказывается, это можно ускорить следующим способом.

def n_inters(s, n):
    iterations = [s]
    while True:
       s = s[::2] + s[1::2]
       if s == iterations[0]: break
       iterations.append(s)

    return iterations[n % len(iterations)]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...