题解 | #字符串排序#

字符串排序

https://www.nowcoder.com/practice/5190a1db6f4f4ddb92fd9c365c944584

把大小写字母摘取出来进行排序,非字母保留在原处以保证其位置不变,然后将排序后的大小写字母重新插入回原来的空位

import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        char[] arr = sc.nextLine().toCharArray();
        StringBuilder sb = new StringBuilder();
        //摘取大小写字母,非字母保留在原处,保证其位置不变
        for (int i = 0; i < arr.length; ++i) {
            if (Character.isLetter(arr[i])) {
                sb.append(arr[i]);
            }
        }

        //对只含有大小写字母的字符串进行排序
        char[] letter = sortLetter(sb.toString());

        //如果是非字母,就输出原字符;如果是字母,就输出排序后的字母
        for (int i = 0, j = 0; i < arr.length; ++i) {
            if (Character.isLetter(arr[i])) {
                System.out.print(letter[j]);
                ++j;
            } else {
                System.out.print(arr[i]);
            }
        }
    }

    //对只含有大小写字母的字符串进行排序
    public static char[] sortLetter(String s) {
        char[] a = s.toCharArray();
        for (int i = 0; i < a.length; ++i) {
            for (int j = a.length - 1; j > i; --j) {
                //此处比较用<而非<=,以保证同一个英文字母的大小写同时存在时,按照原顺序排列
                if (Character.toLowerCase(a[j]) < Character.toLowerCase(a[j - 1])) {
                    char temp = a[j];
                    a[j] = a[j - 1];
                    a[j - 1] = temp;
                }
            }
        }
        return a;
    }
}

}

全部评论

相关推荐

评论
1
收藏
分享
牛客网
牛客企业服务