|
13 / 9 / 10
Регистрация: 03.06.2016
Сообщений: 50
|
||||||
Задача с анаграммами - логика программы05.06.2016, 23:28. Показов 9683. Ответов 28
Метки нет (Все метки)
Дорогие друзья помогите пошагово разобрать задачу с анаграммами
Пользователь вводит через один пробел слова. Найти все группы анаграмм (слов, составленных из одних и тех же букв) в этой строке и вывести на устройство вывода их каждую с новой строки, все слова должны идти через пробел в порядке, в котором они встречаются в строке. При этом допускается выводить одинаковые слова в одной строке анаграмм. Слова состоящие из разного количества одинаковых букв анаграммами не являются. Пример: Входная строка: «123*456*231*546*231*312 4556» Результат: 123*231*231*312 456*546 4556 Что я сделал: - принимаю строку - перевожу из строки слова в массив - далее беру первое слово из массива и сравниваю по символьно с вторым словом из массива и допустим 123 с 321 совпало что делать дальше я никак не могу сообразить. Прошу помогите поэтапно разложить. Привожу свой код. Здесь я пытаюсь сравнить первое слово со вторым, чтобы потом переделать под массив как то так... Кликните здесь для просмотра всего текста
0
|
||||||
| 05.06.2016, 23:28 | |
|
Ответы с готовыми решениями:
28
Являются ли две строки анаграммами Проверить, являются ли 2 строки анаграммами Проверить являются ли две строки анаграммами |
|
155 / 154 / 53
Регистрация: 30.04.2016
Сообщений: 321
|
|
| 05.06.2016, 23:46 | |
|
Я бы решил сортировкой. Arrays.sort(char[]) в помощь.
0
|
|
|
2755 / 2062 / 509
Регистрация: 17.02.2014
Сообщений: 9,491
|
||||||
| 06.06.2016, 10:03 | ||||||
|
Этот метод может помочь:
0
|
||||||
|
155 / 154 / 53
Регистрация: 30.04.2016
Сообщений: 321
|
|
| 06.06.2016, 10:28 | |
|
Aviz__, А может и не помочь. Что будет если на вход прийдут например "bd" и "cc"?
0
|
|
|
2755 / 2062 / 509
Регистрация: 17.02.2014
Сообщений: 9,491
|
|
| 06.06.2016, 11:36 | |
|
ninjacut, Специально для вас запустил))
Инверсная пара: bd <-> db Инверсная пара: cc <-> cc
0
|
|
|
155 / 154 / 53
Регистрация: 30.04.2016
Сообщений: 321
|
|
| 06.06.2016, 11:37 | |
|
Aviz__, Инверсная пара: cc <-> bd
1
|
|
|
2755 / 2062 / 509
Регистрация: 17.02.2014
Сообщений: 9,491
|
||||||
| 06.06.2016, 11:50 | ||||||
|
Алгоритм дал сбой
! Спасибо!!!Добавлено через 6 минут Исправил
1
|
||||||
|
155 / 154 / 53
Регистрация: 30.04.2016
Сообщений: 321
|
||||||
| 06.06.2016, 11:58 | ||||||
Сообщение было отмечено Psyh как решение
Решение
Aviz__, В этом варианте, 123 и 231 не подходят как того требовало условие задачи.
Самый легкий способ, по-моему
1
|
||||||
|
2755 / 2062 / 509
Регистрация: 17.02.2014
Сообщений: 9,491
|
|
| 06.06.2016, 12:05 | |
|
ninjacut, Да, ваше решение проще и изящнее) для этого случая.
0
|
|
|
13 / 9 / 10
Регистрация: 03.06.2016
Сообщений: 50
|
|
| 06.06.2016, 15:56 [ТС] | |
|
Спасибо большое очень помогли!
0
|
|
|
2755 / 2062 / 509
Регистрация: 17.02.2014
Сообщений: 9,491
|
|||||||||||
| 07.06.2016, 09:26 | |||||||||||
|
В ошибочной версии моего алгоритма, как вы успели догадаться, я хотел реализовать сравнение, но без if(). Сразу не пришло на ум использовать оператор OR ^
![]() В итоге, получилось вот что:
0
|
|||||||||||
|
155 / 154 / 53
Регистрация: 30.04.2016
Сообщений: 321
|
|
| 07.06.2016, 13:06 | |
|
Aviz__, Не понял к чему этот вариант если он опять же не работает для варианта: 123 = 213
0
|
|
|
13 / 9 / 10
Регистрация: 03.06.2016
Сообщений: 50
|
||||||
| 07.06.2016, 13:40 [ТС] | ||||||
|
Я вот переделал под условия задачи, все работает, но есть одна проблема как добиться чтобы результат выводился как в условии задачи?
Т.е. Входная строка: «123 456 231 546 231 312 4556» Результат: 123 231 231 312 456 546 4556
0
|
||||||
|
2755 / 2062 / 509
Регистрация: 17.02.2014
Сообщений: 9,491
|
|
| 07.06.2016, 13:51 | |
|
0
|
|
|
155 / 154 / 53
Регистрация: 30.04.2016
Сообщений: 321
|
|
| 07.06.2016, 14:02 | |
|
Psyh, Первое что приходит в голову, делаешь Map<String, List<String>> и соответственно вначале добавляется первое слово в качестве ключа, далее проверяется каждое следующее слово - является ли оно анаграммой каждого ключа, если подходит к какому-то ключу, добавляем в список значений, если нет - то добавляем новый ключ.
Ну или List<List<>> или двумерный массив, как захочется, но удобней с Map по-поему.
0
|
|
|
13 / 9 / 10
Регистрация: 03.06.2016
Сообщений: 50
|
|
| 07.06.2016, 14:24 [ТС] | |
|
ninjacut, Да я когда искал в Google про анаграммы,то там тоже советовали решить задачу через Map<String. У меня слишком мало опыта в программировании и я не смог найти подробное описание по Map<String с простым примером. В голове никак не складывается как его использовать. У вас нету какой нибудь литературы по этому вопросу где будет все разжевано для чайников как я?
Не по теме: Я над этой задачей бьюсь с четверга(02.06) никак не получается ничего сделать. Собеседование я провалил, надо было три задачи еще в понедельник сдать. Но в этой задаче надо разобраться до конца.
0
|
|
|
155 / 154 / 53
Регистрация: 30.04.2016
Сообщений: 321
|
|
| 07.06.2016, 14:37 | |
|
Ну если ты не разбираешься в коллекциях ты рановато на собеседования пошел, в том смысле что не устроишься. Но если не проблема получать отказы, то можешь ходить, хоть поймешь что не знаешь, что надо еще выучить.
То есть, тебе надо не только разобраться в Map, а в общем в Generics и в Collections. Насчет литературы, посмотри в сторону книг Head First Java, Thinking in Java или в Core Java Volume I (больше как справочник, мне не нравится как написано, но это субъективно, многим почему-то нравится) - главы на эти темы, и выбери что более доступно/нравится. Или сам поищи в гугле, на эту тему очень много расписано.
1
|
|
|
2755 / 2062 / 509
Регистрация: 17.02.2014
Сообщений: 9,491
|
|||||||||||||||||||||
| 09.06.2016, 10:39 | |||||||||||||||||||||
|
Немного подумав, я нашел еще более красивый способ
![]() Psyh, Спасибо, что поделился этой задачкой
0
|
|||||||||||||||||||||
|
155 / 154 / 53
Регистрация: 30.04.2016
Сообщений: 321
|
||||||
| 09.06.2016, 10:55 | ||||||
|
Я уже указывал на ошибки в твоем похожем решении здесь
0
|
||||||
|
2755 / 2062 / 509
Регистрация: 17.02.2014
Сообщений: 9,491
|
|
| 09.06.2016, 11:22 | |
|
ninjacut, Ёмаё, одна сумма то может быть составлена из разных чисел! 10 = 5 + 5 = 7 + 3!
Согласен, плохо быть дукраком А так хотелось найти простой способ...Добавлено через 12 минут ninjacut, Существуют ли какиенить преобразования для создания уникальных "сумм", для разных комбинаций одних и тех же символов?
1
|
|
| 09.06.2016, 11:22 | |
|
Помогаю со студенческими работами здесь
20
Логика программы Логика программы Логика программы Логика работы программы Интересная сложная задача: Рекурсивный запрос + логика Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Переходник USB-CAN-GPIO
Eddy_Em 20.03.2026
Достаточно давно на работе возникла необходимость в переходнике CAN-USB с гальваноразвязкой, оный и был разработан. Однако, все меня терзала совесть, что аж 48-ногий МК используется так тупо: просто. . .
|
Оттенки серого
Argus19 18.03.2026
Оттенки серого
Нашёл в интернете 3 прекрасных модуля:
Модуль класса открытия диалога открытия/ сохранения файла на Win32 API;
Модуль класса быстрого перекодирования цветного изображения в оттенки. . .
|
SDL3 для Desktop (MinGW): Рисуем цветные прямоугольники с помощью рисовальщика SDL3 на Си и C++
8Observer8 17.03.2026
Содержание блога
Финальные проекты на Си и на C++:
finish-rectangles-sdl3-c. zip
finish-rectangles-sdl3-cpp. zip
|
Символические и жёсткие ссылки в Linux.
algri14 15.03.2026
Существует два типа ссылок — символические и жёсткие.
Ссылка в Linux — это запись в каталоге, которая может указывать либо на inode «файла-ИСТОЧНИКА», тогда это будет «жёсткая ссылка» (hard link),. . .
|
|
[Owen Logic] Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора
ФедосеевПавел 14.03.2026
Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора
ВВЕДЕНИЕ
Выполняя задание на управление насосной группой заполнения резервуара,. . .
|
делаю науч статью по влиянию грибов на сукцессию
anaschu 13.03.2026
прикрепляю статью
|
SDL3 для Desktop (MinGW): Создаём пустое окно с нуля для 2D-графики на SDL3, Си и C++
8Observer8 10.03.2026
Содержание блога
Финальные проекты на Си и на C++:
hello-sdl3-c. zip
hello-sdl3-cpp. zip
Результат:
|
Установка CMake и MinGW 13.1 для сборки С и C++ приложений из консоли и из Qt Creator в EXE
8Observer8 10.03.2026
Содержание блога
MinGW - это коллекция инструментов для сборки приложений в EXE. CMake - это система сборки приложений. Здесь описаны базовые шаги для старта программирования с помощью CMake и. . .
|