/ / Ermitteln der Ähnlichkeit zweier String - Arrays - Java, Arrays, String, Compare

Die Ähnlichkeit zweier String-Arrays finden - Java, Arrays, String, Compare

Ich entschuldige mich, wenn eine ähnliche Frage gestellt wurde, aber nur eine, die ich finden konnte So finden Sie ähnliche Muster in Listen / Arrays von Zeichenfolgen

Das Problem ist einfach. Es gibt zwei große Reihen von Zeichenfolgen. Und ich muss die Ähnlichkeit herausfinden. Ähnlichkeit ist einfach die Anzahl ähnlicher Zeichenfolgen.

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

Die Ähnlichkeit zwischen diesen beiden Listen ist 2.

Die offensichtliche Lösung ist der Brute-Force-Weg. Vergleichen Sie einfach jedes Wort mit jedem anderen Wort. Aber was ist die nächstbeste Lösung?

Ist die Verwendung einer Hash-Map eine effektive Lösung? Gehen Sie eine Liste durch und fügen Sie jedes Wort in eine Hash-Map ein. Dann sehen Sie, wie viele der zweiten Listenschlüssel in der Hash-Map enthalten sind.

Ist dies die allgemein akzeptierte Methode, um diese Art von Problem zu lösen? Es scheint baumbasierte Lösungen zu geben, die jedoch nicht einfach zu sein scheinen.

Vielen Dank.

Antworten:

2 für die Antwort № 1

Benutze einen HashSet. Es bietet Funktionen zum Aufnehmen von Kreuzungen.

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());

Sie können auf die verweisen Set Schnittstelle in Die Java-Tutorials


2 für die Antwort № 2

Sie können jedes Array in Set sichern und dann die Schnittmenge ermitteln:

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());