LeetCode刷题8-字符串筛选排序

package com.example.demo.leetcode.case202208;

import java.util.*;

/**
 * 功能描述
 *
 * @author ASUS
 * @version 1.0
 * @Date 2022/8/6
 */
public class Main2022080602 {

       /* 描述
        编写一个程序,将输入字符串中的字符按如下规则排序。
        规则 1 :英文字母从 A 到 Z 排列,不区分大小写。
        如,输入: Type 输出: epTy
        规则 2 :同一个英文字母的大小写同时存在时,按照输入顺序排列。
        如,输入: BabA 输出: aABb
        规则 3 :非英文字母的其它字符保持原来的位置。

        如,输入: By?e 输出: Be?y
        数据范围:输入的字符串长度满足  1≤n≤1000

        输入描述:
        输入字符串
        输出描述:
        输出字符串

        示例1
        输入:
        A Famous Saying: Much Ado About Nothing (2012/8).

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

    public static void main(String[] args) {
        // 获取输入的字符串
        Scanner scanner = new Scanner(System.in);
        String s = scanner.nextLine();
        char[] chars = s.toCharArray();
        // 过滤特殊字符-只保留英文字母 有序
        List<Character> characters = new ArrayList<>();
        for (char ch : chars) {
            if (Character.isLetter(ch)) {
                characters.add(ch);
            }
        }
        // 将新的英文字母先排序处理
        characters.sort(Comparator.comparingInt(Character::toLowerCase));

        // 组装新的字符串
        StringBuilder stringBuilder = new StringBuilder();
        for (int i = 0, j = 0; i < chars.length; i++) {
            // 如果该位置是字母 则需要用排序好的英文字母中按顺序取出一个字母放到该位置
            if (Character.isLetter(chars[i])) {
                stringBuilder.append(characters.get(j));
                j++;
            } else {
                // 非字母处理
                stringBuilder.append(chars[i]);
            }
        }
        // 打印
        System.out.println(stringBuilder.toString());
    }
}

 

posted @ 2022-08-06 15:44  chch213  阅读(100)  评论(0编辑  收藏  举报