题解 | #字符串排序#

字符串排序

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;
    }
}

}

全部评论

相关推荐

07-02 18:09
门头沟学院 Java
苍穹外卖和谷粒商城这俩是不是烂大街了,还能做吗?
想去重庆的鸽子在吐槽:你不如把这俩做完自己搞明白再优化点再来问 何必贩卖焦虑
点赞 评论 收藏
分享
码农索隆:想看offer细节
点赞 评论 收藏
分享
05-20 13:59
门头沟学院 Java
米黑子米黑子:你这个成绩不争取下保研?
点赞 评论 收藏
分享
大飞的诡术妖姬:之前看b站多明海有个说法,日本就业竞争非常低的原因不光是毕业学生少,还有很多人干两年不喜欢职场氛围就辞职躺平,位置也空了很多,论吃苦耐劳还得看咱们
点赞 评论 收藏
分享
评论
1
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务