wie bildet man worte?

a.pst

Aktives Mitglied
salve,

wie bildet man am besten worte aus einem gegebenen alphabetes {'e', 's', 'n', 'u', 'i', 't', 'n', 'd', 'r'}, aber ohne buchstaben widerholungen?
mir will da nichts rechtes einfallen, wie ich da alle möglichen 9 buchstabigen worte finden kann, aber ohne buchstaben wiederholung ... :(
wer kann mir da auf die sprünge helfen?
 

DrZoidberg

Top Contributor
Was du suchst nennt sich "Permutationen".
Versuch mal den Code hier.
Java:
static ArrayList<String> permutations(String str) {
    ArrayList<String> list = new ArrayList<>();
    if(str.length() == 0) list.add(str);
    else {
        for(int i = 0; i < str.length(); i++) {
            ArrayList<String> oldList = permutations(str.substring(0, i) + str.substring(i+1));
            for(String s: oldList) list.add(str.charAt(i) + s);
        }
    }
    return list;
}
 

a.pst

Aktives Mitglied
merci, herr doktor :)
ich wär nicht auf die idee gekommen :(

ganze 362880 worte, ergo: es funktioniert ...jetzt muß ich mir nur noch eine möglichkeit zum filtern finden :D

edit sagt, es wären wiederholungen dabei.
wie sie drauf kommt die edit? wenn man die 36288 listen einträge in eine hashmap stopft hat diese dann eine länge von 181440.
 
Zuletzt bearbeitet:

DrZoidberg

Top Contributor
Wenn da Wiederholungen drin sind, dann liegt das daran, dass in deinem Alphabet der selbe Buchstabe zwei mal vorkommt.
"esnuitndr" enthält z.B. zwei mal das n.
 

njans

Top Contributor
Falls es interessiert, hier eine iterative Lösung:
Java:
	public List<String> permutation(String alphabet, int length)
	{
		Queue<String> queue = new LinkedList<>();
		queue.addAll(getSuccesors("", alphabet));
		String current = queue.poll();
		
		while (current.length() < length)
		{
			queue.addAll(getSuccesors(current, alphabet));
			current = queue.poll();
		}
		
		return new ArrayList<>(queue);
	}
	
	private List<String> getSuccesors(String prefix, String alphabet)
	{
		List<String> result = new ArrayList<>();
		
		for (int i = 0; i < alphabet.length(); i++)
			result.add(prefix + alphabet.charAt(i));
		
		return result;
	}
 

Ähnliche Java Themen

Neue Themen


Oben