47 lines
1.4 KiB
Java
47 lines
1.4 KiB
Java
import java.util.Random;
|
|
|
|
public class BestShuffle {
|
|
private final static Random rand = new Random();
|
|
|
|
public static void main(String[] args) {
|
|
String[] words = {"abracadabra", "seesaw", "grrrrrr", "pop", "up", "a"};
|
|
for (String w : words)
|
|
System.out.println(bestShuffle(w));
|
|
}
|
|
|
|
public static String bestShuffle(final String s1) {
|
|
char[] s2 = s1.toCharArray();
|
|
shuffle(s2);
|
|
for (int i = 0; i < s2.length; i++) {
|
|
if (s2[i] != s1.charAt(i))
|
|
continue;
|
|
for (int j = 0; j < s2.length; j++) {
|
|
if (s2[i] != s2[j] && s2[i] != s1.charAt(j) && s2[j] != s1.charAt(i)) {
|
|
char tmp = s2[i];
|
|
s2[i] = s2[j];
|
|
s2[j] = tmp;
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
return s1 + " " + new String(s2) + " (" + count(s1, s2) + ")";
|
|
}
|
|
|
|
public static void shuffle(char[] text) {
|
|
for (int i = text.length - 1; i > 0; i--) {
|
|
int r = rand.nextInt(i + 1);
|
|
char tmp = text[i];
|
|
text[i] = text[r];
|
|
text[r] = tmp;
|
|
}
|
|
}
|
|
|
|
private static int count(final String s1, final char[] s2) {
|
|
int count = 0;
|
|
for (int i = 0; i < s2.length; i++)
|
|
if (s1.charAt(i) == s2[i])
|
|
count++;
|
|
return count;
|
|
}
|
|
}
|