Я могу представить алгоритм, подобный Бойерсу-Муру, для сопоставления строк.После того, как вы определили повторяющуюся последовательность n символов, затем, чтобы проверить, длиннее ли последовательность, начинающаяся с позиции i , вам нужно проверить только позицию i + n чтобы увидеть, если это тот же символ, что и в позиции i .Если это не так, то вы начинаете проверку с позиции i + 1 ;если это так, то вы начинаете зацикливать символы между этими двумя точками, чтобы увидеть, все ли они одинаковые.Если вы все сделаете правильно, вы можете пропустить большую часть строки.В худшем случае, это все равно O (n), как и должно быть, но в лучшем случае вы можете пропустить много.
Что касается требований к месту: просто следите за самой длинной длиной пробега, исимвол (или начальная позиция). Вам не нужен двумерный массив.