Нахождение сходства двух массивов String

1

Я прошу прощения, если есть аналогичный вопрос, заданный раньше, но только один, который я мог найти, - это как найти похожие шаблоны в списках/массивах строк

Проблема проста. Существует два больших массива строк. И мне нужно выяснить сходство. Сходство - просто количество подобных строк.

String [] A = {"A", "B", "C", "D"}; String [] B = {"X", "Y", "B", "D"};

Сходство между этими двумя списками - 2.

Очевидное решение - путь грубой силы. Просто сравните каждое слово с любым другим словом. Но какое следующее лучшее решение?

Использует ли хэш-карту эффективное решение? Перейдите по одному списку и поместите каждое слово в хэш-карту. Затем посмотрите, сколько из второго списка ключей содержится в хэш-карте.

Является ли это общепринятым способом выполнения этого типа проблемы? Кажется, есть решения на основе дерева, но они не кажутся прямолинейными.

Спасибо.

Теги:
string
arrays
compare

2 ответа

2
Лучший ответ

Используйте HashSet. Он обеспечивает функциональность для пересечения.

list1 // your 1st list
list2 // your second list

Set<Type> s1 = new HashSet<Type>();
s1.addAll(list1); // add your values from list 1
Set<Type> s2 = new HashSet<Type>(); 
s2.addAll(list2); // add your values from list 2

Set<Type> intersection = new HashSet<Type>(s1);
intersection.retainAll(s2);
System.out.println(intersection.size());

Вы можете обратиться к интерфейсу Set в Учебниках Java

  • 0
    Спасибо. Это именно то, что я хочу.
  • 1
    @madu Нет проблем. Интерфейсы Коллекции и Карты очень классные.
2

Вы можете сделать резервную копию каждого массива в Set, а затем найти пересечение:

Set<String> firstSet = new HashSet<String>(Arrays.asList(firstArray));
Set<String> secondSet = new HashSet<String>(Arrays.asList(secondArray));
firstSet.retainAll(secondSet);
System.out.println(firstSet.size());

Ещё вопросы

Сообщество Overcoder
Наверх
Меню