华为OD题目: 字符串重新排序

news/2025/1/8 20:00:21/

字符串重新排序

知识点排序数组
时间限制: 1s 空间限制: 256MB 限定语言: 不限

题目描述:
给定一个字串s,s包含以空格分隔的若干个单词,请对s进行如下处理后输出:
1、单词内部调整:对每个单词字母重新按字典序排序
2、单词间顺序调整:

  1. 统计每个单词出现的次数,并按次数降序排列:
    2)次数相同时,按单词长度升序排列;
  2. 次数和单词长度均相同时,按字典序升序排列。
    请输出处理后的字符串,每个单词以一个空格分隔。

输入描述:
行宁符串,每个宁符取值范围: [a-zA-Z0-9]以及空格,宁符串长度范围: [1,1000]
输出描述
重新排序后的宁符串,每个单词间隔1个空格,且首属无空格

示例1
输入:
This is an apple
输出:
an is This aelpp

示例2
输入:
My sister is in the house not in the yard
输出:
in in eht eht My is not adry ehosu eirsst

解题思路:

  • 就是用map存放,key是字典排序后的字符串,value是次数,按照题目要求的进行排序就可以了,
  • 要注意的地方就是: 在list打印的时候,这里要注意,出现多少次,就得打印多少个,因为key只保存一个,
package com.darling.boot.order.od.od33;import java.util.*;public class Main1 {public static void main(String[] args) {Scanner sc = new Scanner(System.in);String line = sc.nextLine();String[] strings = line.split(" ");Map<String, Integer> map = new HashMap<>();for (String str : strings) {char[] chars = str.toCharArray();Arrays.sort(chars);String key = String.valueOf(chars);int val = map.getOrDefault(key, 0);map.put(key, val + 1);}Set<Map.Entry<String, Integer>> entries = map.entrySet();List<Map.Entry<String, Integer>> list = new ArrayList<>(entries);list.sort( (a1, a2) -> {String key1 = a1.getKey();String key2 = a2.getKey();Integer value1 = a1.getValue();Integer value2 = a2.getValue();if (value1 != value2) {//如果次数不一样,按次数降序排序return value2 - value1;}else {if (key1.length() != key2.length()) {//次数相同时,按单词长度升序排列;return key1.length() - key2.length();}else {//次数和单词长度均相同时,按字典序升序排列。return key1.compareTo(key2);}}});StringBuilder sb = new StringBuilder();for (Map.Entry<String, Integer> entry : list) {String key = entry.getKey();//出现的次数Integer n = entry.getValue();//这里要注意,出现多少次,就得打印多少个,因为key只保存一个for (int i = 0; i < n; i++) {sb.append(key).append(" ");}}sb.deleteCharAt(sb.length() - 1);System.out.println(sb);}}

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

相关文章

python算法中的深度学习算法之深度信念网络(详解)

目录 学习目标: 学习内容: 深度信念网络 Ⅰ. 预训练 Ⅱ. 微调 学习目标: 一分钟掌握 python算法中的深度学习算法之深度信念网络 入门知识

STM32 i2c 驱动0.42寸OLED

STM32 i2c 驱动0.42寸OLED&#xff0c;这是个项目中使用的方案&#xff0c;调试也是比较费劲&#xff0c;主要是取字模和代码的匹配&#xff0c;下个篇章中详解一下取字模的过程&#xff0c;在这个方案中的使用。 本文使用的测试代码 STM32i2c驱动0.42寸OLED&#xff0c;SSD1…

全国职业院校技能大赛网络建设与运维赛项赛题(四)

全国职业院校技能大赛 网络建设与运维 赛题 (四)

设计模式——适配器模式(类适配器、对象适配器)

是什么&#xff1f; 我们平时的有线耳机接口分为USB的和Type-C的接口&#xff0c;但是手机的耳机插口却只有一个&#xff0c;像华为的耳机插口现在基本都是Type-c的&#xff0c;那如果我们现在只有USB接口的耳机怎么办呢&#xff0c;这个时候就需要使用到一个转换器&#xff0c…

动态规划-最少的硬币数目

动态规划-最少的硬币数目 1 题目2 示例示例 1&#xff1a;示例 2&#xff1a;示例 3&#xff1a;示例 4&#xff1a;示例 5&#xff1a;提示&#xff1a; 3 题解3.1 解题思路3.2 题解3.2.1 C解法3.2.2 C语言解法 1 题目 给定不同面额的硬币 coins 和一个总金额 amount。编写一…

leetcode-027-移除元素

题目及测试 package pid027; /*27. 移除元素 给你一个数组 nums 和一个值 val&#xff0c;你需要 原地 移除所有数值等于 val 的元素&#xff0c;并返回移除后数组的新长度。不要使用额外的数组空间&#xff0c;你必须仅使用 O(1) 额外空间并 原地 修改输入数组。元素的顺序可…

B. LuoTianyi and the Table

题目链接 Codeforces Round 872 (Div. 2) Example input 5 2 2 1 3 1 4 2 2 -1 -1 -1 -1 2 3 7 8 9 -3 10 8 3 2 4 8 -3 0 -7 1 4 3 -32030 59554 16854 -85927 68060 -64460 -79547 90932 85063 82703 -12001 38762 output 9 0 64 71 1933711 题目大意&#xff1a; 每组测试…

一个文章学会使用Git

GIT版本控制系统 版本控制系统 : ​ 1.记录历史版本信息 (记录每一次修改的记录) ​ 2.方便团队相互之间协作开发 ​ … 常用的版本控制系统 cvs / svn : 集中式版本控制系统git : 分布式版本控制系统 svn git GIT工作原理 工作区 : 我们能看到的&#xff0c;并且用来写代码的…