Я решаю проблему, которая имеет некоторое время и ограничения памяти, и, к сожалению, это не позволяет ограничить время.Как я могу оптимизировать этот код Python, чтобы работать быстрее?
Я довольно новичок в Python, поэтому любая обратная связь по более быстрым/лучшим методам ценится.
Это проблема программа пытается решить:
Определите сходство двух строк & В качестве длины самого длинного общего префикса, что они разделяют. то есть сходство AAAB и AABCAAAB равно 2.
Программа должна выводить сумму сходств входной строки со всеми ее суффиксами. т.е. для AAAB, он должен выводить
подобия (AAAB, AAAB) + подобия (AAAB, ААВ) + подобия (AAAB, АВ) + подобия (AAAB, В) = 4 + 2 + 1 + 0 = 7
Первая строка ввода - это количество строк, которые необходимо ввести, и каждая последующая строка содержит строку, подлежащую обработке.
from array import array
n = int(sys.stdin.readline())
A = [0] * n #List of answers
for i in range(1,n+1):
string = sys.stdin.readline().strip()
A[i-1] = len(string)
for j in range(1, len(string)):
substr = string[j:len(string)]
sum = 0
for k in range(0, len(substr)):
if substr[k] != string[k]:
break
else:
sum += 1
A[i-1] += sum
for i,d in enumerate(A):
print d
Если вы используете Python 2.x , вы можете начать с изменения всех этих 'range' до' xrange'. Есть ли веская причина, по которой вам нужно читать по очереди, а не в одном большом куске? – wim
Кстати, реальная проблема - избавиться от этого тройного вложенного цикла. Я уверен, что есть какая-то умная логика, которую вы можете переопределить! – wim
Вы должны искать более быстрый алгоритм. –