public static void permute(char[] chs,int k) {
if(k==chs.length-1) {
System.out.println(String.valueOf(chs));
return;
}
for(int i=k;i<chs.length;i++) {
char tmp=chs[i];
chs[i]=chs[k];
chs[k]=tmp;
permute(chs,k+1);
tmp=chs[i];
chs[i]=chs[k];
chs[k]=tmp;
}
}
public static void permute(char[] chs,int k) {
if(k==chs.length-1) {
System.out.println(String.valueOf(chs));
return;
}
HashSet<Character> s=new HashSet<Character>();
for(int i=k;i<chs.length;i++) {
if(s.contains(chs[i])) {
continue;
}
s.add(chs[i]);
char tmp=chs[i];
chs[i]=chs[k];
chs[k]=tmp;
permute(chs,k+1);
tmp=chs[i];
chs[i]=chs[k];
chs[k]=tmp;
}
}
public static String nextDicOrder(char[] chs) {
int j=-1;
for(int i=chs.length-2;i>=0;i--) {
if(chs[i]<chs[i+1]) {
j=i;
break;
}
}
if(j==-1)
return null;
int min=-1;
for(int i=chs.length-1;i>j;i--){
if(chs[i]>chs[j]) {
if(min==-1) {
min=i;
}
else {
if(chs[i]<chs[min]) {
min=i;
}
}
}
}
char tmp=chs[j];
chs[j]=chs[min];
chs[min]=tmp;
for(int i=0;i<(chs.length-1-(j+1)+1)/2;i++) {
tmp=chs[j+1+i];
chs[j+1+i]=chs[chs.length-1-i];
chs[chs.length-1-i]=tmp;
}
return String.valueOf(chs);
}