Как вывести повторяющиеся части строки Python, а так же ее самую длинную повторяющуюся часть и остальные повторяющиеся части
Мы хотим вывести повторяющийся кусок входящей на ввод строки (без разделителей).
Например, на ввод берем текст книги повторенный N раз. Нужно найти уникальный кусок текста книги в тексте без повторений.
Исходные данные: 1234123123121211
Результат: 1234 - самые длинные данные 123, 12, 11 - другие повторяющиеся данные
Ответы (1 шт):
считываем несколько символов в piece, их количество задано в repeating_length_min, с 0 индекса строки data
если строка piece есть внутри строки data, то положим ее в лист repeating_pieces
считываем несколько символов в piece, их количество задано в repeating_length_min, с 1 индекса строки data
если строка piece есть внутри строки data, то положим ее в лист repeating_pieces
.... Повторяем эти шаги, пока не дойдем до индекса data[data_len-repeating_length_min-1], этот индекс включается в проверку
считываем несколько символов в piece, их количество задано в repeating_length_min + 1, с 0 индекса строки data
если строка piece есть внутри строки data, то положим ее в лист repeating_pieces
считываем несколько символов в piece, их количество задано в repeating_length_min +1, с 1 индекса строки data
если строка piece есть внутри строки data, то положим ее в лист repeating_pieces
.... Делаем это до тех пор, пока repeating_length_min + N не станет равным data_len
.... Теперь в списке repeating_pieces собраным все повторяющиеся подстроки строки data
сортируем список, что бы наверху (в 0 индексе) были самые длинные строки: repeating_pieces.sort(key=len)
выводим с помощью print в цикле сперва самую длинную строку из списка repeating_pieces
а затем выводим с помощью print в цикле все остальные строки из списка repeating_pieces
Code:
data = input("Введите данные для анализа:\n")
data_len = len(data)
repeating_length_min = input("Задайте минимальную длину строки для анализа совпадений:\n")
repeating_length_min = int(repeating_length_min)
repeating_pieces = []
longest_repeating_piece = ''
piece = ''
index_counter = 0
range_counter = 0
while range_counter != data_len - repeating_length_min:
while index_counter <= data_len - repeating_length_min:
for i in range(repeating_length_min + range_counter):
piece += data[i]
if piece in data:
repeating_pieces.append(piece)
piece = ''
index_counter += 1
index_counter = 0
range_counter += 1
repeating_pieces.sort(key=len)
print(f'\nСамое короткое повторяющееся значение: {repeating_pieces[0]}')
print(f'\nСамое длинное повторяющееся значение: {repeating_pieces[-1]}')
print('\nТоп 10 самых коротких повторяющихся значений:')
for i in range(10):
print(f'#{i}: {repeating_pieces[i]}')
repeating_pieces.reverse()
print('\nТоп 10 самых длинных повторяющихся значений:')
for i in range(10):
print(f'#{i}: {repeating_pieces[i]}')