Permutation mit Wiederholung

1

1991

Gast
Hi,
ich suche nach einer Möglichkeit Permutationen mit Wiederholungen zu erstellen.
Genauer suche ich eine nach einer Möglichkeit Permutationen mit 1,2 und 3 Duplikaten zu erstellen.
Bsp:

abcd:

1 Duplikat - aabc
2 Duplikate - aabb
3 Duplikate - aaaa

Mfg
 
1

1991

Gast
Java:
import java.util.*;

public class test {

    static int anz = 0;
    static int max;
    
    static ArrayList<String> nullDuplikate = new ArrayList<String>();

    public static void main(String [] args) {
 
        String s = "abcdef";
        max = s.length()-1;
        permutation(s.toCharArray(),max);
        System.out.println(nullDuplikate);
        
    }
    static void swap(char[] a, int i, int j) {
        char temp = a[i];
        a[i] = a[j];
        a[j] = temp;
    } 
    static void permutation (char[] a, int letzterIndex) {
        if (letzterIndex==0){
            zuListe(a);
            anz++;
        }else{
            permutation(a, letzterIndex-1);
            for (int i=0; i<=letzterIndex-1; i++){
                swap(a, i, letzterIndex);
                permutation(a, letzterIndex-1);
                swap(a, i, letzterIndex);
            }
        }
    }
    static void zuListe(char[] a) {
        nullDuplikate.add(String.valueOf(a));       
    }
}
Das habe ich bisher auf die Beine gestellt.
Hierbei wird eine Arraylist erstellt, welche alle Permutationen von, in diesem Fall, abcdef enthält.
Jetzt will ich drei weitere Listen erstellen, welche nur die Permutationen MIT einem Duplikat(z.B. aabc), zwei Duplikaten (z.B. aabb) und drei Duplikaten (z.B aaaa) enthält.
Genau an dem Punkt hänge ich.
Wie erstelle ich eine Liste mit Permutationen aus einem String ("abcdef"), wo nur Permutationen mit einem/zwei/drei Duplikat/en eingetragen werden.
 
S

SlaterB

Gast
wie definiert sich aaaa = 3 Duplikate?
aabc = 1 Duplikat
aaab = 2 Duplikate?
aaaa = 3 Duplikate

eine grundsätzliche Möglichkeit wäre offensichtlich, alle Kombinationen zu erstellen und dann die Ergebnisse zu filtern,

etwas intelligenter ist vielleicht, mit verringerter Anzahl zu suchen,
alle Kombinationen aus drei Zeichen, abc, und dann aus jedem dieser Ergebnisse durch Hinzufügen eines a oder b oder c
drei 4er mit je einem Duplikat zu generieren

bin mir nicht ganz sicher was du mit 2/3 Duplikaten meinst, vielleicht dort auch etwas in die Richtung möglich,
wenn aber nicht auf fast dieselbe Weise, dann vielleicht nicht die Mühe wert
 

Ähnliche Java Themen


Oben