私は単語の正規形を作ることに行き詰まっています(単語の正規形には元の単語と同じ文字が含まれていますが、ソートされた順序になっています。たとえば、「コンピュータ」の正規形は「cemoprtu」です(アルファベット順を考慮してください)、 「プログラム」のそれは「agmoprr」です。)
次のコードを使用して、mergeSort を使用して単語の文字を並べ替えます。それでも、標準的な形式ではなく、元の単語が表示されるだけです。誰かが私のコードの何が問題なのか教えてもらえますか?
public static String canonicalForm(String word) {
char[] string = new char[word.length()];
for (int i = 0; i < word.length(); i ++) {
string[i] = word.charAt(i);
}
mergeSort(string);
String result = "";
for (char ch: string) {
result += ch;
}
System.out.println(result);
}
public static void mergeSort(char[] string) {
if (string.length > 1) {
char[] left = Arrays.copyOfRange(string, 0, string.length/2);
char[] right = Arrays.copyOfRange(string, string.length/2, string.length);
mergeSort(left);
mergeSort(right);
merge(string, left, right);
}
}
public static void merge(char[] string, char[] left, char[] right) {
int i1 = 0;
int i2 = 0;
for (int i = 0; i < string.length; i ++) {
if (i1 < left.length) {
if (left[i1] - right[i2] <= 0) {
string[i] = left[i1];
i1 ++;
}
} else if (i2 >= right.length) {
string[i] = left[i1];
i1 ++;
} else {
string[i] = right[i2];
i2 ++;
}
}
}
}