【牛客网 - 华为机试】HJ26 字符串排序
发布日期:2021-05-07 21:21:38 浏览次数:19 分类:技术文章

本文共 2899 字,大约阅读时间需要 9 分钟。

题目描述

编写一个程序,将输入字符串中的字符按如下规则排序。

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

如,输入: Type 输出: epTy

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

如,输入: BabA 输出: aABb

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

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

注意有多组测试数据,即输入有多行,每一行单独处理(换行符隔开的表示不同行)

输入描述:

输入字符串

输出描述:

输出字符串

示例1

输入

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

输出

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

代码:

StringBuilder and Comparator, 简单地忽略大小写排个序即可

/** * Copyright (C), 2019-2021 * author  candy_chen * date   2021/4/13 21:47 * * @Classname HJ26 * Description: 字符串排序 */import java.util.ArrayList;import java.util.Comparator;import java.util.List;import java.util.Scanner;/** * */public class Main {           public static void main(String[] args) {                   Scanner in = new Scanner(System.in);        while (in.hasNextLine()){               String str = in.nextLine();            System.out.println(sort(str));        }    }    private static String sort(String str) {           //先将英文字母收集起来        List
letters = new ArrayList<>(str.length()); for (char ch : str.toCharArray()) { //Character.isLetter(ch)该函数是判断该字符是否是字母的函数 if (Character.isLetter(ch)){ letters.add(ch); } } //将英文字母先排好序 letters.sort(new Comparator
() { @Override public int compare(Character o1, Character o2) { return Character.toLowerCase(o1) - Character.toLowerCase(o2); } }); //若是非英文字母则直接添加 StringBuilder result = new StringBuilder(); for (int i = 0,j = 0;i < str.length();i++){ if (Character.isLetter(str.charAt(i))){ result.append(letters.get(j++)); }else { result.append(str.charAt(i)); } } return result.toString(); }}

优秀的解法:

import java.io.BufferedReader;import java.io.IOException;import java.io.InputStreamReader;public class Main{       public static void main(String[] args) throws IOException{           BufferedReader br = new BufferedReader(new InputStreamReader(System.in));        String s;        while((s = br.readLine()) != null){               char[] ch = s.toCharArray();            char[] chars = new char[ch.length];            int flag = 65, j=0;            while(flag<=90){                   for(int i=0; i
=65&&ch[i]<=90) || (ch[i]>=97&&ch[i]<=122)){ if(ch[i]==flag || ch[i]== flag+32){ chars[j] = ch[i]; j++; } } } flag++; } j=0; for(int i=0; i
=65&&ch[i]<=90) || (ch[i]>=97&&ch[i]<=122)){ ch[i] = chars[j]; j++; } } System.out.println(String.valueOf(ch)); } }}
上一篇:【牛客网 - 华为机试】HJ81 字符串字符匹配
下一篇:【数据结构系列】——二叉树的各个遍历及序列化与反序列化

发表评论

最新留言

不错!
[***.144.177.141]2025年04月02日 00时51分23秒