2013-09-11 4 views
0

У меня есть вопрос здесь, и я действительно не знаю, с чего начать на нем не хватаетвхождений подстроки

s1.find(s2) 

Любая помощь будет оценена.

Переменные s1 и s2 относятся к strs. Выражение s1.find (s2) возвращает индекс первого вхождения s2 в s1. Выражение s1.find (s2, 5) возвращает индекс первого вхождения s2 в s1, начиная с индекса 5 в s1. (См. Справку (str.find) для получения дополнительной информации)

Напишите выражение, которое создает индекс второго вхождения s2 в s1. Если s2 не встречается дважды в s1, выражение должно выражать -1. В отличие от str.count, вы должны разрешить перекрывающиеся вхождения s2.

Например, если s1 «банан» и s2 является «ана», ваше выражение должно возвращать 3. Если s1 «яблоко» и s2 является «р», ваше выражение должно возвращать 2.

Ваш ответ должен быть единственным выражением, которое не использует квадратные скобки (строковое индексирование и нарезка), и вы можете вызывать метод str.find и использовать арифметические операторы (+, - и т. д.).

+1

Что бы вы могли установить второй аргумент 'find' сделать это даст вам второе вхождение' s2'? – Marius

ответ

5

Это печатает 3.

s1 = 'banana' 
s2 = 'ana' 
second_index = s1.find(s2, s1.find(s2)+1) 
print(second_index) 

Это печатает -1.

s1 = 'bana' 
s2 = 'ana' 
second_index = s1.find(s2, s1.find(s2)+1) 
print(second_index) 

Таким образом, выражение, которое вы, вероятно, ищете, является s1.find(s2, s1.find(s2)+1).

+0

Спасибо. Не могли бы вы объяснить, почему второй s1.find (s2) +1 находится там, где он есть? Когда я читаю это, я вижу, что s2 внутри - 1 для всего, что находится слева от запятой, и я не уверен, как правая сторона действует вместе с левым. – Zack

+0

@ Zack В первом примере 's1.find (s2)' возвращает 1. Если вы только что сделали 's1.find (s2, s1.find (s2)), он снова вернет 1. Но мы хотим начать поиск по индексу 2. Я добавил 1 к индексу, возвращаемому 's1.find (s2)', чтобы он начал поиск подстроки * за пределами * первого найденного индекса, который был равен 1. – Shashank

Смежные вопросы