牛客网——复杂字符串排序

题目描述

编写一个程序,将输入字符串中的字符按如下规则排序(一个测试用例可能包含多组数据,请注意处理)。

规则 1 :英文字母从 A 到 Z 排列,不区分大小写。

如,输入: Type 输出: epTy

规则 2 :同一个英文字母的大小写同时存在时,按照输入顺序排列。

如,输入: BabA 输出: aABb

规则 3 :非英文字母的其它字符保持原来的位置。

如,输入: By?e 输出: Be?y

样例:

输入:

A Famous Saying: Much Ado About Nothing(2012/8).

输出:

A aaAAbc dFgghh : iimM nNn oooos Sttuuuy (2012/8).

链接:https://www.nowcoder.com/questionTerminal/d9aa3894d3aa4887843a85d26daa4437
来源:牛客网

import java.util.Scanner;
 
public class Main {
    public static void main(String[] args) {
        Scanner input = new Scanner(System.in);
        while (input.hasNext()) {
            String s = input.nextLine();
            String r = sort(s);
            System.out.println(r);
        }
    }
 
    public static String sort(String s) {
        if (s.length() <= 0) {
            return null;
        }
        char[] c = s.toCharArray();
        StringBuffer sb = new StringBuffer();
        // 对字母进行排序的思想是:将每一字符与'a'-'z'或'A'-'Z'做比较,并添加到字符缓冲中,经过此步骤完成了
        // 不同字母按递增顺序排序,同一字母(不区分大小写)按原来顺序排列。
        for (int i = 0; i < 26; i++) {
            for (int j = 0; j < c.length; j++) {
                if (c[j] == 'a' + i || c[j] == 'A' + i) {
                    sb.append(c[j]);
                }
            }
        }
        StringBuffer res = new StringBuffer();
        int flag = 0;
        for (int i = 0; i < c.length; i++) {
            if (isChar(c[i])) {
                res.append(sb.charAt(flag));
                flag++;
            } else {
                res.append(c[i]);
            }
        }
        return res.toString();
    }
 
    // 判断某一字符是否为字母
    public static boolean isChar(char c) {
        if ((c >= 'a' && c <= 'z') || (c >= 'A' && c <= 'Z')) {
            return true;
        } else {
            return false;
        }
    }
}

猜你喜欢

转载自www.cnblogs.com/JAYPARK/p/10273431.html