АА18

Задача

В строке найти первое слово, которое встречается два раза подряд. Слова разделяются одним или несколькими пробелами. Напечатать его.

Пояснение к решению

Идея простая:

  1. последовательно разбиваем строку на отдельные слова с помощью функций стандартной библиотеки
  2. смотрим, не встретилось ли некоторое слово два раза подряд

Решение

Основной вариант:

Перевод на Java:

 

Старый неаккуратный и медленный вариант:

 

Вустянюк Ігор Дмитрович
Вустянюк Ігор Дмитрович

Latest posts by Вустянюк Ігор Дмитрович (see all)

4 thoughts on “АА18

  1. Мы можем обойтись без разбиения на слова и хранения их всех — отслеживая пробелы и сравнивая подстроки, заключённые между ними.
    Но мне приведённый вариант показался более эстетичным. К тому же он более универсальный — позволяет получить намного больше информации о строке, хотя, наверное, медленный на больших строках.

  2. Действительно даже в строке вида «А А …» ваше решение будет продолжать парсить остальные миллиарды терабайт 🙂
    Но оно не только медленное, но и требует удвоенной памяти. Его стоит оставить, но ниже добавить решение, оставляющее строку на месте.

  3. Принято. Есть несколько вопросов:
    — Как Вы думаете, как происходит присваивание a=tmp? Происходит излишнее здесь копирование содержимого одной строки в другую или простое переназначение указателей?
    — Для чего предназначено бессмысленное (на мой взгляд) оценочное суждение «Идея простая»?