Preciso de um programa que receba palavras e diga quantos anagramas ela possui, e abaixo exibir todos eles. Porém o meu algoritmo está gerando anagramas repetidos. Como retirá-los?
"import java.util.Scanner;
class Lista {
String s;
private String[] array;
private int n;
//Construtor
public Lista () {
this(10000);
}
//Construtor da classe
public Lista (int tamanho){
array = new String[tamanho];
n = 0;
}
public int getN () {
return this.n;
}
//Metodo que insere um elemento na ultima posicao da lista
public void inserirFim(String s) {
array[n] = s;
n++;
}
public void ordenar (Lista lista) {
String temp;
for (int i=0 ; i < (n-1); i++) {
//Antes de comparar atribui-se o valor atual de i ao menor
int menor = i;
//Comparando com os outros valores do vetor
for (int j = (i+1); j < n; j++){
if (array[menor].compareTo(array[j]) > 0)
menor = j;
}
//Trocando os valores menor e maior
temp = array[i];
array[i] = array[menor];
array[menor] = temp;
}
}
//Metodo para imprimir a lista na tela
public void Imprimir(){
for(int i=0; i<n; i++){
System.out.println(array[i]);
}
}
}
class Anagrama{
static int contador = 0;
public static void anagramas(Lista lista,String primeiro,String cadeia) {
if (cadeia.length()==1){
contador++;
lista.inserirFim(cadeia);
}
if(cadeia.length()==2)
{
contador = contador+2;
lista.inserirFim(primeiro+cadeia.charAt(1)+""+cadeia.charAt(0));
lista.inserirFim(primeiro+cadeia.charAt(0)+""+cadeia.charAt(1));
}
else{
for (int i=0;i<cadeia.length();i++) {
anagramas(lista, primeiro+cadeia.charAt(i),tirarLetra(cadeia,i));
}
}
}
public static String tirarLetra(String cadeia,int i)
{
if(i==0)
{
return cadeia.substring(i+1,cadeia.length());
}
else
{
if(i==cadeia.length())
{
return cadeia.substring(0,cadeia.length()-1);
}
else
{
return cadeia.substring(0,i)+cadeia.substring(i+1,cadeia.length());
}
}
}
public static void main(String args[]) {
String[] entrada = new String[1000];
String linha;
int numEntrada = 0;
int numerodecpf;
Scanner ler = new Scanner(System.in);
//Leitura da entrada padrao
numerodecpf = ler.nextInt();
for (int i = 0; i < numerodecpf; i++) {
contador = 0;
Lista lista = new Lista();
entrada[i] = ler.next();
anagramas(lista,"",entrada[i]);
System.out.println(contador);
lista.ordenar(lista);
lista.Imprimir();
}
}
}"