Имея строку s и непустую строку p, найдите все начальные индексы анаграмм p в s.
Пример:-
- Ввод: с:
"cbaebabacd"
р:"abc"
- Выход:
[0, 6]
- Объяснение:
Подстрока с начальным индексом = 0 называется "cba", что является анаграммой "abc".
Подстрока с начальным индексом = 6 называется "bac", что является анаграммой "abc".
Я написал этот код на Python для «Найти все анаграммы в строке». Когда я запускаю этот код, он дает мне сообщение Time exceeded
:
1) Верна ли моя логика
2) Как я могу оптимизировать, чтобы он мог работать быстрее, так как для больших входных строк требуется много времени (около 1 минуты).
def anagram(s,p):
if len(p)>len(s):
return False
l_s=len(s)
l_p=len(p)
list1=[]
offset=l_p
k=offset
i=0
while (i <= l_s):
s4=s[i:k]
#print ("s= "+s4)
if sorted(p)==sorted(s4):
list1.append(i)
i+=1
k=i+(offset)
return list1
p
? Некоторое объяснение того, что ваши переменные и что вы хотите вывести, было бы хорошо. - person ycx   schedule 14.12.2018p
иs
не очень полезные имена. Кроме того, что означает[0, 6]
? Что такое0
? Что такое6
? - person bfontaine   schedule 15.12.2018i
иk
на единицу, вы, по сути, просто добавляете один символ и удаляете один символ в своемs4
. Таким образом, вам не нужно снова сортировать, это узкое место. Вместо этого я бы вел словарь. - person Autonomous   schedule 15.12.2018l_s - l_p
. - person Barmar   schedule 15.12.2018sorted(p)
каждый раз в цикле, оно никогда не меняется. - person Barmar   schedule 15.12.2018