В методе main с консоли считать имя файла, который содержит слова, разделенные пробелами.
Найти в тексте все пары слов, которые являются обращением друг друга. Добавить их в result.
Использовать StringBuilder.
Кодировка файла - UTF-8.
Обращенные слова
- 24
Недоступна
Комментарии (350)
- популярные
- новые
- старые
Для того, чтобы оставить комментарий Вы должны авторизоваться
Сергей Смирнов
позавчера, 04:41
String first = "рот";
String second = "тор"
String first = "тор";
String second = "рот"
Это разные пэйры или один и тот же? В лист добавлять оба варианта или один из них?
А добавлять только уникальные пэйры или они могут повторяться?
Без понимания этих моментов мы просто в угадайку играем и тратим время.
0
01000101
10 июня, 08:24
Считал слова в список. Обычный цикл for по списку, без Iterator. Заношу слово в переменную и удаляю тут же из списка. После этого в оставшемся списке ищу палиндром для считанного. Если нашёл, в result закидываю Pair и удаляю палиндром из списка тоже. В конце шага в любом случае i-- (т.е. с тем же успехом можно было постоянно работать с listOfWords[0]).
ЗЫ Успешно протестировал все варианты от Дианы Чиганцевой (в комментах чуть порыщите).
+1
Artem Trainee в Deutsche Telekom
19 июня, 05:36
сделал по Вашей методе. варианты от Дианы прошли все кроме 4-го, в нем поменялся порядок пар. Валя не принимает :(
0
Oulina Full Stack Developer в Фриланс
6 июня, 09:30
Варианты входных данных от Диана Чиганцева очень помогли
0
Dmitriy
2 июня, 14:17
Итак, после чтения файла у нас массив (ArrayList) String.
Запускаем цикл. Проверяем, что элемент массива.get(i) содержится в этом же массиве, но в перевернутом виде и индексы не совпадают
true: конструируем Pair и заносим в result. Убираем из массива и прямое и перевернутое слова (.remove(Obj).
i--
все
Протестировано на всех примерах. Валидатор принял +1
NonGrata
5 июня, 15:47
Круто, помог
0
Anonymous #3036451
2 июня, 07:02
1. В списке result могут быть повторяющиеся пары. Фильтровать на уникальность не надо.
2. Можно обойтись без циклов в цикле и добавлять пары прямо в момент чтения файла, т. н. однопроходный алгоритм:
1) Создаем ArrayList<String> words.
2) Получаем и буфера строку и разбиваем ее на слова.
Для каждого слова:
1) Получаем его реверс.
2) Ищем реверс в words.
2.1) Нашли реверс. Создали пару (реверс и слово поменяли местами). Удалили реверс из words
2.2) Не нашли реверс. Добавили слово в words.
ИМХО, оптимальный алгоритм и по памяти (в листе только слова которым не нашли пару, а не весь файл) и по сложности (поиск в листе меньшего размера)
+2
Стас
20 мая, 12:32
Задача описана не до конца, пока вы в result должны попадать в том числе и повторяющиеся сочетания, но при этом слова которые уже нашли пару и попали в result должны удаляться из обрабатываемого списка. Пока вы этого не добьетесь валидатор вас не пропустит, но и что не так - не скажет.
Задачка на умение читать мысли составителя задачи)
+2
SoSed
12 апреля, 09:56
Кстати, в задании сказано, что должен существовать конструктор без параметров, но, ведь, не сказано, что других конструкторов быть не должно! Думал, валидатор не примет если будет второй конструктор (с двумя строками в аргументах), но попробовал. Принимает)
Решил через массив строк. Без коллекций.
0
Yuri_S Инженер-конструктор 2к.
29 марта, 11:54
Решил так:
1. Слова из файла загнал в Лист
2. Клонировал Лист и сделал для каждого слова reverse.
3. Сделал цикл-в-цикле - сравнивал слова из первого Листа со словами из второго Листа по правилу:
- индексы не должны быть равны (отсеиваем одиночные палиндромы)
- если у слова (И) нашлась пара (ЖИ) в реверснутом массиве, проверяем чтобы и у слова в позиции (ЖИ) была пара (И) в реверснутом массиве
- если "перекрестная пара" найдена - значит обращение существует, добавляем его в список Пар и аккуратно удаляем перекрестную пару (4 элемента) из двух массивов, откатываем счетчик (ЖИ) на 2 позиции, счетчик (И) не трогаем.
Всё! 0
UnnamedRoad
26 марта, 15:40

0
Mikhail Efimov
20 марта, 09:05
Просто создал метод, который считает дубликаты и затем добавляет в список пары
вторым методом сравнивал строки в массиве (перевел каждую строку в массив символов, отсортировал и сравнил) и валидатор пропустил. Главное помнить что валидатор может накидать вам кучу пустых строк в примере, которые можно обходить trimToSize() и то, что каждая пара одинаковых элементов тоже является парой
Код очень грязный получился, но какое условие, такой и код)))
+1