华为OD机试之字符串重新排列、字符串重新排序(Java源码)

news/2024/11/17 4:57:08/

字符串重新排列、字符串重新排序

题目描述

给定一个字符串s,s包括以空格分隔的若干个单词,请对s进行如下处理后输出:
1、单词内部调整:对每个单词字母重新按字典序排序
2、单词间顺序调整:
1)统计每个单词出现的次数,并按次数降序排列
2)次数相同,按单词长度升序排列
3)次数和单词长度均相同,按字典升序排列请输出处理后的字符串,每个单词以一个空格分隔。

输入描述

一行字符串,每个字符取值范围:[a-zA-z0-9]以及空格,字符串长度范围:[1,1000]

输出描述

输出处理后的字符串,每个单词以一个空格分隔。

用例

输入This is an apple
输出an is This aelpp
说明
输入My sister is in the house not in the yard
输出in in eht eht My is not adry ehosu eirsst
说明

源码和解析
解析:

本题目只要对Java中的List排序熟悉的话,就可以轻松进行解决。

示例代码:

import java.util.ArrayList;
import java.util.Comparator;
import java.util.HashMap;
import java.util.List;
import java.util.Map;public class T25 {public static void main(String[] args) {String input="My sisiter is in the house not in the yard";String[] words=input.split(" ");List<String> wordList=new ArrayList<String>();for(String word:words){//单词内部 对每个单词重新按字典排序char[] chArr=word.toCharArray();List<Character> characters=new ArrayList<>();for(char ch:chArr){characters.add(ch);}characters.sort(new Comparator<Character>() {@Overridepublic int compare(Character o1, Character o2) {if(o1>o2){return 1;}else if(o1<o2){return -1;}return o1;}});StringBuilder sb=new StringBuilder();for(Character c:characters){sb.append(c);}wordList.add(sb.toString());}//遍历wordList 确定出现的次数final Map<String, Integer> wordCountMap=new HashMap<String, Integer>();for(String word:wordList){if(wordCountMap.containsKey(word)){wordCountMap.put(word, wordCountMap.get(word)+1);}else{wordCountMap.put(word, 1);}}wordList.sort(new Comparator<String>() {@Overridepublic int compare(String w1, String w2) {//1)统计每个单词出现的次数,并按次数 降序排列Q//2) 次数相同,按 单词长度升序排列//3)次数和单词长度均相同,按字典升序排列if(wordCountMap.get(w1)>wordCountMap.get(w2)){return -1;}else if(wordCountMap.get(w1)<wordCountMap.get(w2)){return 1;}//次数相同的 按 单词长度升序排列if(w1.length()>w2.length()){return 1;}else if(w1.length()<w2.length()){return -1;}//次数和单词长度均相同,按字典升序排列int wordLen=w1.length();for(int i=0;i<wordLen;i++){if(w1.charAt(i)==w2.charAt(i)){continue;}if(w1.charAt(i)>w2.charAt(i)){return 1;}else{return -1;}}return 0;}});for(String s:wordList){System.out.print(s+" ");}}
}

http://www.ppmy.cn/news/84019.html

相关文章

sa:segment anything Demo学习与介绍

地址 论文地址:https://arxiv.org/pdf/2304.02643v1.pdf 代码:https://github.com/facebookresearch/segment-anything 贡献 1、对未知的数据集和任务具有良好的零样本(zero-shot)分割性能。分割过程可全自动分割(Everything模式)或由不同的手工提示(Prompt模式)驱动…

gcc编译器报错集锦

文章主要记录一下不常见的错误&#xff0c;供后续开发参考&#xff1a; 日期&#xff1a;2023-05-25 16:31:41 报错&#xff1a;cc1: all warnings being treated as errors 编译条件&#xff1a; Ubuntu 18.04&#xff0c;编译器&#xff1a;aarch64-mix210-linux-gcc编译代码…

2023-04-23 学习记录--C/C++-邂逅C/C++(中)

合抱之木&#xff0c;生于毫末&#xff1b;九层之台&#xff0c;起于累土&#xff1b;千里之行&#xff0c;始于足下。&#x1f4aa;&#x1f3fb; 上一篇&#xff1a;邂逅C/C&#xff08;上&#xff09; 一、if语句 ⭐️ &#xff08;一&#xff09;、格式 &#x1f36d; if…

【突发奇想 之 vector使用时性能测试】

目录&#xff1a; 前言分析vector不同操作对时间的影响1.for循环中使用 size()成员函数2.初始化时初始化为0&#xff0c;与其他值3.vector分配容量问题4. vector赋值操作5. 遍历&#xff1a;下标和迭代器 总结 前言 打怪升级&#xff1a;第90天 分析vector不同操作对时间的影响…

成功加冕!用友大易获评2023最佳招聘管理软件供应商

人力资源服务业旗帜性商业奖项2023金帜奖(HRFLAG AWARDS)颁奖典礼于近日隆重举行。经过3个月的评选&#xff0c;用友大易从615家人力资源服务机构中脱颖而出&#xff0c;最终荣获「2023最佳招聘管理软件供应商」奖项。 2023金帜奖(HRFLAG AWARDS)是人力资源服务行业旗帜性的商业…

PMP考试都是什么题?

PMP新版大纲加入了ACP敏捷管理的内容&#xff0c;说是敏捷混合题型占到了 50%&#xff0c;但是这次318的考试&#xff0c;敏捷题占了大半&#xff0c;都说敏捷和情景快要占到80%-90%。 所以有友友说开了四个小时盲盒&#xff0c;题目读不懂&#xff0c;或者觉得4个选项都不对或…

Redhat7.3linux系统防火墙命令总结

在Linux系统部署皕杰报表后&#xff0c;需要关闭防火墙或者开放报表工具使用的端口&#xff0c;才能通过浏览器访问报表。 在linux中如何关闭防火墙或开启端口呢&#xff1f;基本上是基于命令操作。通过几天的实践&#xff0c;总结了有关防火墙的操作命令&#xff0c;现记录如…

从绿色节能趋势看存储资源盘活系统HBlock

数据中心约超过一半的成本是电费&#xff0c;数据存储系统作为数据中心三大件之一&#xff0c;能耗也约占三分之一&#xff0c;面对非结构化数据量的快速增长挑战&#xff0c;以及国家对数据中心绿色节能要求的提高&#xff0c;分布式存储的绿色节能愈来愈加重要。 分布式存储…