/ / Encontrando a similaridade de dois arrays de String - java, arrays, string, compare

Encontrando a similaridade de dois arrays de String - java, arrays, string, compare

Peço desculpas se houver uma pergunta semelhante feita antes, mas apenas uma que eu encontrei foi Como encontrar padrões semelhantes em listas / matrizes de cadeias de caracteres

O problema é simples. Existem duas grandes matrizes de cadeias de caracteres. E eu preciso descobrir a semelhança. Semelhança é simplesmente o número de cadeias semelhantes.

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

Similaridade entre essas duas listas é 2.

A solução óbvia é o caminho da força bruta. Apenas compare cada palavra com todas as outras palavras. Mas qual é a próxima melhor solução?

Está usando um mapa de hash uma solução eficaz? Percorra uma lista e coloque cada palavra em um mapa de hash. Em seguida, veja quantas das segundas chaves da lista estão contidas no mapa de hash.

Essa é a maneira geralmente aceita de executar esse tipo de problema? Parece que existem soluções baseadas em árvore, mas elas não parecem simples.

Obrigado.

Respostas:

2 para resposta № 1

Use um HashSet. Ele fornece funcionalidade para fazer interseções.

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

Você pode consultar o Set interface em Os tutoriais de Java


2 para resposta № 2

Você pode fazer backup de cada matriz em Set e, em seguida, encontrar a interseção:

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