题解 | #字符串排序#
字符串排序
https://www.nowcoder.com/practice/5190a1db6f4f4ddb92fd9c365c944584
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
public class Main {
public static void main(String[] args) {
BufferedReader r = new BufferedReader(new InputStreamReader(System.in));
String a;
try {
a = r.readLine();
} catch (IOException e) {
throw new RuntimeException(e);
}
char[] chs = a.toCharArray();
int i = 0, j, k, b1 = 0, b2 = 0, l = chs.length;
char ch;
boolean bool1, bool2, bool3, bool4;//
while (i < l - 1) {
j = 0;//前一个比较的值
k = j + 1;//后一个比较的值
while (j < l - i && k < l - i) {
bool1 = (chs[j] - 'a' | 'z' - chs[j]) >
0;//索引为j的字符是否在a~z之间
bool2 = (chs[j] - 'A' | 'Z' - chs[j]) >
0;//索引为j的字符是否在A~Z之间
bool3 = (chs[k] - 'a' | 'z' - chs[k]) >
0;//索引为k的字符是否在a~z之间
bool4 = (chs[k] - 'A' | 'Z' - chs[k]) >
0;//索引为k的字符是否在A~Z之间
if ((bool1 || bool2) && (bool3 || bool4)) {
if (bool1) b1 = chs[j] - 'a';//忽略大小写
if (bool2) b1 = chs[j] - 'A';//忽略大小写
if (bool3) b2 = chs[k] - 'a';//忽略大小写
if (bool4) b2 = chs[k] - 'A';//忽略大小写
if (b1 > b2) {//冒泡排序
ch = chs[j];
chs[j] = chs[k];
chs[k] = ch;
}
j = k;//索引赋值,比较下一对
k++;//索引赋值,比较下一对
} else if (!bool1 && !bool2 && (bool3 || bool4)) {
j = k;//第一个不是,索引往后走一个是字母的索引
k++;//第二索引+1
} else if ((bool1 || bool2) && !bool3 && !bool4) {
k++;//第二个不是,第二个索引+1
} else {//两个比较值都不是字母,索引+2
j += 2;
k += 2;
}
}
i++;
}
System.out.print(new String(chs));
}
}