Решаем кодом: как найти длину последнего слова

Используем нестандартный подход

Решаем кодом: как найти длину последнего слова

Новая задачка, которая попадается иногда на собеседованиях, её нужно решить кодом:

Компьютер запрашивает у пользователя строку. Как найти длину последнего слова в этой строке?

Если что, слово — это то, что состоит из любых символов подряд, кроме пробелов.

Попробуйте решить её сами на JavaScript или Python, а потом сравните с решением.

Эту задачу можно решить разными способами, мы используем логику и немного нестандартного подхода.

Первый шаг — простой: запрашиваем у пользователя строку и сохраняем её в отдельную переменную. Он очевидный, на нём можно не останавливаться.

А вот что дальше делать — не совсем понятно. Штука в том, что пользователь в строке может поставить сколько угодно пробелов, в том числе и в конце строки. Это значит, что нам сначала надо найти крайнее правое положение в строке, где нет пробела. Правое — значит с конца строки, потому что мы читаем слева направо.

Для этого мы переходим на конец строки, запоминаем позицию и смотрим: этот символ — пробел или нет? Если пробел, то смещаемся влево на одну позицию и снова проверяем, и так далее. Как только нашли не пробел — останавливаемся и запоминаем, на какой позиции мы остановились.

Мы знаем конец последнего слова, теперь надо найти начало.

Чтобы это сделать, мы продолжаем двигаться влево, только теперь каждый раз смотрим, чтобы символ на текущей позиции не был равен пробелу. И как только, двигаясь так влево, мы дойдём до следующего пробела или до начала строки (вдруг там только одно слово?), то получим позицию начала слова. Её тоже запоминаем.

Итак, у нас есть номер позиции с концом слова и его началом. Всё, что нам остаётся сделать, — вычесть из одного другое и получить длину последнего слова. 

Вот так всё просто, теперь попробуйте реализовать это в коде. А если не получится, загляните в решение.

s = input('Введите строку ')

end = len(s) - 1

while s[end] == " ":
    end -= 1

start = end
while start >= 0 and s[start] != " ":
    start -= 1

l = end - start

print(l)

s = prompt("Введите строку: ")
end = s.length - 1;

while (end >= 0 && s[end] === ' ') {
    end--;
}

let start = end;
while (start >= 0 && s[start] !== ' ') {
    start--;
}
    
l = end - start

console.log(l)

Вам слово

Приходите к нам в соцсети поделиться своим мнением о задаче, предложить своё решение и почитать, что пишут другие. А ещё там выходит дополнительный контент, которого нет на сайте: шпаргалки, опросы и разная дурка. В общем, вот тележка, вот ВК — велком!

Обложка:

Алексей Сухов

Корректор:

Ирина Михеева

Вёрстка:

Кирилл Климентьев

Соцсети:

Юлия Зубарева

Получите ИТ-профессию
В «Яндекс Практикуме» можно стать разработчиком, тестировщиком, аналитиком и менеджером цифровых продуктов. Первая часть обучения всегда бесплатная, чтобы попробовать и найти то, что вам по душе. Дальше — программы трудоустройства.
Получите ИТ-профессию Получите ИТ-профессию Получите ИТ-профессию Получите ИТ-профессию
А вы читали это?
easy