/*
Permutazioni di una stringa
*/
import javax.swing.*;
class Permutazioni {
static int lungpar, //lunghezza della parola
numperm = 1; //contatore di permutazioni
public static void main(String[] args) {
String parola;
do {
//input della parola
parola = JOptionPane.showInputDialog("Inserisci parola lunga tra i 2 e i 6 caratteri");
lungpar = parola.length();
}
while (lungpar<2 || lungpar>6);
//dimensiona un Array di caratteri che conteranno la parola
char[] vetPar = new char[lungpar];
//riempie l'array dei caratteri della stringa digitata
for (int i=0; i<lungpar; i++) vetPar[i] = parola.charAt(i);
permuta(vetPar, 0);
System.out.println("\nNumero permutazioni: " + numperm);
System.exit(0);
}
//metodo ricorsivo per le permutazioni
static void permuta(char vet[], int item) {
//caso base: la lunghezza della parola è 1 allora stampala
if (item == lungpar - 1) stampa(vet);
else {
//caso generale
permuta(vet, item+1);
for (int k = item+1; k < lungpar; k++) {
swaplettere(vet, item, k);
permuta(vet, item+1);
swaplettere(vet, item, k);
numperm++;
}
}
}
//Stampa contenuto array di caratteri
static void stampa(char vet[]) {
for (int i=0; i<vet.length; System.out.print(vet[i++]));
System.out.print("\t");
}
//Scambia il contenuto di due locazioni dell'array
static void swaplettere(char v[], int x, int y) {
char temp;
temp = v[x];
v[x] = v[y];
v[y] = temp;
}
}