Questo è del codice del 2003, l'ho scritto io e non mi ricordo perché, non è ottimizzato, ma mi pare che faccia le cose che chiedi tu.
codice:
class permutation2 {
char[] string, working, result;
char a,b;
int index1, index2;
String res;
permutation2(String s) {
string = s.toCharArray();
working = new char[string.length];
res = "";
init();
}
//passo gli indici che non devono essere modificati
private void createWorking(int i, int j) {
a = string[i];
b = string[j];
index1 = i;
index2 = j;
for (int k=0; k < string.length; k++) {
working[k] = string[k];
}
permute();
}
private void init() {
for (int i=0; i < string.length; i++) {
for (int j=0; j < string.length; j++) {
if (j==i && j < string.length-1) {
j++;
}
createWorking(i, j);
}
}
}
private void permute() {
working[index1] = a;
working[index2] = b;
res +="\n"+ new String(working);
working[index1]=b;
working[index2] = a;
res += "\n" + new String(working);
}
public String result() {
return res;
}
}
public class testPer2 {
public static void main (String args[]) {
permutation2 p = new permutation2("ciao");
System.out.println(p.result());
}
}