@jslby

Как удалить все повторяющиеся вариации?

Есть скажем список из словосочетаний:
хочу красный мяч
красный мяч хочу
где взять красный мяч
какого цвета красный мяч
красный мяч хочу найти
мяч хочу красный

Нужно очистить данный список и оставить только уникальные словосочетания, слова которых не повторяются в разных вариациях.

Т.е. из этого списка нужно получить такой:
хочу красный мяч
где взять красный мяч
какого цвета красный мяч
красный мяч хочу найти

А удалить следующие словосочетания:
красный мяч хочу - аналог: хочу красный мяч
мяч хочу красный - аналог: хочу красный мяч
  • Вопрос задан
  • 250 просмотров
Пригласить эксперта
Ответы на вопрос 3
saboteur_kiev
@saboteur_kiev Куратор тега Программирование
software engineer
можно отсортировать слова в алфавитном порядке, затем удалить дубликаты строк.
Ответ написан
Комментировать
Сортировать слова — слишком просто. Можно разбить строку на слова (не забыв привести их к одному регистру). Потом каждое слово хэшировать. Затем полученные хэши складывать (как числа) и сумму использовать в качестве хэша словосочетания. Ну а дальше на выходе объект. По массиву исходных строк пробегаем в цикле, каждую строку добавляет в выходной объект, в качестве ключа используя хэш. Если такой ключ уже использовался, предыдущее значение будет перезаписано. Все выходит элементарно и красиво, однострочное тело цикла уникализации. Попутно не забыть придумать механизм борьбы с коллизиями.
Почему бы и нет?
d0e7323f980a.jpg
Ответ написан
@dtestyk
Сортировать слова — слишком просто.
Присваиваем каждому слову простое число.
Тогда словосочетание будет их произведением.
Удаляем словосочетания с одинаковыми значениями.
Например, используя их в качестве ключа в хешмапе.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы