题解 | #字符串排序#
字符串排序
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)); } }