[RESOLVIDO] Permutação: erro

3 respostas
gpd38
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.

3 Respostas

E

Um HashSet não aceita elementos repetidos. Use uma outra estrutura de dados.

gpd38

Mas usando esta estrutura não tem como mesmo.

gpd38

Resolvido. Dei uma pesquisada melhor na internet e encontri a solução mais proxima do que eu queria.

Teoria ajuda d+;

Criado 29 de junho de 2011
Ultima resposta 19 de set. de 2013
Respostas 3
Participantes 2