Из данной строки я хочу найти подстроку (некоторый фиксированный размер k), которая идет первой в лексикографическом порядке сортировки среди всех подстрок одинакового размера в строке.
Я бы сделал это с помощью скользящего окна над очень длинной строкой (размер m) и хотел бы найти эту подстроку для каждой позиции скользящего окна (размер n> k), когда я перемещаю ее через строку.
Кажется, что тривиальное решение заняло бы время m * O (n log (n)).
Я думаю, что мог бы добраться до m * O (log (n)), если бы я сделал нормальную сортировку в начале, а затем просто удалил подстроку, которая начинается в начале последней позиции окна, и вставил новую подстроку, которая заканчивается в конце текущей позиции окна в уже отсортированную коллекцию подстрок каждый раз, когда я перемещаю окно. (разумеется, я не храню подстроки отдельно, а просто сохраняю их позиции в коллекции, поэтому пространство должно быть n-k целых чисел),
Есть ли более быстрый алгоритм для этого?