Start путем создания массива префиксов.
Петля через него в обратном направлении, и остановить первый раз, когда вы найдете то, что повторяется в строке (то есть, она имеет str.count()>1
.
Теперь, если же подстрока существует прямо рядом с собой, вы можете вернуть его в качестве слова, которое вы ищете, однако вы должны принять во внимание пример 'appleappl'
, где предлагаемый алгоритм вернет appl
. Для этого, когда вы найдете подстроку, которая существует более одного раза в вашей строке, вы возвращаетесь в результате, подстрока плюс все, что находится между ее следующим появлением, а именно: 'appleappl'
вы возвращаете 'appl' +'e' = 'apple'
. Если таких строк не найдено, вы возвращаете целое слово, так как нет повторений.
def repeat(s):
prefix_array=[]
for i in range(len(s)):
prefix_array.append(s[:i])
#see what it holds to give you a better picture
print prefix_array
#stop at 1st element to avoid checking for the ' ' char
for i in prefix_array[:1:-1]:
if s.count(i) > 1 :
#find where the next repetition starts
offset = s[len(i):].find(i)
return s[:len(i)+offset]
break
return s
print repeat(s)
Как ваша программа знает, что такое слово? Например, как он узнает, что «яблоко» - это не одно слово? Что относительно слов, которые содержат другие слова? – elethan
Начну с намеков. Если вы все еще застряли, попробовав их, опубликуйте свое попытку, и мы сможем дать вам больше возможностей подумать и попробовать. Вот подсказки. (1) Сначала создайте возможные подстроки, которые вы хотите искать в каждой строке. Есть ли минимальная или максимальная длина? Создайте список или набор подстрок из строки ввода. (2) Когда у вас есть подстроки для поиска, попробуйте идентифицировать уникальные местоположения во входной строке, где появляются подстроки. Это должно заставить вас начать! –
Почему не вывод "pythonpythonp" => "ythonp"? –