HJ26题解 | #字符串排序#

字符串排序

https://www.nowcoder.com/practice/5190a1db6f4f4ddb92fd9c365c944584?tpId=37&tqId=21249&ru=/exam/oj

1、冒泡排序

2、相邻两个字母的位置用while循环获取:j k

import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        String str = sc.nextLine();
        System.out.println(sortStr(str));
    }

    private static String sortStr(String str) {
        char[] chars = str.toCharArray();
        int length = chars.length;

        for (int i = 0; i < length; i++) {
            int j = 0;
            while ( j < length - i ) {
                while (j < length - i && !isChar(chars[j])) {
                    j++;
                }

                int k = j + 1;
                while (k < length - i && !isChar(chars[k])) {
                    k++;
                }

                if (k < length - i && compare(chars[j], chars[k])) {
                    char temp = chars[j];
                    chars[j] = chars[k];
                    chars[k] = temp;
                }
                j = k;
            }
        }

        return String.valueOf(chars);
    }

    private static boolean compare(char ch1, char ch2) {
        int value1 = ch1 >= 'a' && ch1 <= 'z' ? ch1 - 'a' : ch1 - 'A';
        int value2 = ch2 >= 'a' && ch2 <= 'z' ? ch2 - 'a' : ch2 - 'A';

        return value1 > value2;
    }

    private static boolean isChar(char ch) {
        return (ch >= 'a' && ch <= 'z') || (ch >= 'A' && ch <= 'Z');
    }
}

全部评论

相关推荐

每晚夜里独自颤抖:要求太多的没必要理
点赞 评论 收藏
分享
评论
1
收藏
分享

创作者周榜

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