
【牛客网 - 华为机试】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) { //先将英文字母收集起来 Listletters = 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)); } }}
发表评论
最新留言
不错!
[***.144.177.141]2025年04月02日 00时51分23秒
关于作者

喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
ASP.NET MVC之JsonResult(六)
2019-03-05
SQL Server之深入理解STUFF
2019-03-05
使用mybatis-generator生成底层
2019-03-05
Android APK 重签名
2019-03-05
Mybatis【3】-- Mybatis使用工具类读取配置文件以及从属性读取DB信息
2019-03-05
Mybatis【5】-- Mybatis多种增删改查那些你会了么?
2019-03-05
Mybatis【7】-- Mybatis如何知道增删改是否成功执行?
2019-03-05
Mybatis【9】-- Mybatis占位符#{}和拼接符${}有什么区别?
2019-03-05
计算输入的一句英文语句中单词数
2019-03-05
zabbix系列之十——添加短信告警
2019-03-05
docker复制文件到宿主机
2019-03-05
lvs+keepalive构建高可用集群
2019-03-05
Mysql高可用架构(主从同步)
2019-03-05
mysql主从延迟高的原因
2019-03-05
ATS缓存数据结构
2019-03-05
glob模块
2019-03-05
6 个 Linux 运维典型问题
2019-03-05