import java.util.*;
import javax.swing.JOptionPane;
public class permutacao
{
// Imprime todas as permutações do conjunto de caracteres fornecido
public static void permuta(String prefixo, HashSet<Character> conjunto)
{
if (conjunto.size() == 0)
{
// Caso base: não há mais itens no conjunto, então imprima o prefixo
System.out.println(prefixo);
}
else
{
// Caso geral: primeiro, repita para cada item do conjunto
Iterator<Character> it = conjunto.iterator();
while (it.hasNext())
{
// Para cada item, crie uma cópia do conjunto sem o mesmo ("restantes")
// e continue recursivamente, passando o item adicionado o ao final do
// prefixo e passando também o conjunto de itens restantes
char c = it.next();
HashSet<Character> restantes = (HashSet)conjunto.clone();
restantes.remove(c);
permuta(prefixo + c, restantes);
}
}
}
public static void main(String[] args)
{
String s = JOptionPane.showInputDialog("Entre com uma seqüência de caracteres");
HashSet<Character> tudo = new HashSet<Character>();
for (int i = 0; i < s.length(); i++)
{
tudo.add(s.charAt(i));
}
permuta("", tudo);
}
}
O código acima não mostra corretamente a permutação caso haja letras repetidas, tipo CASA(duas letras a), terra(duas letras r), araraquara(5 letras a e 3 letras r).
Alguém poderia me ajudar com esta encrenca.