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

news/2024/7/20 16:39:51 标签: java, 开发语言, 华为OD

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

题目描述

给定一个字符串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排序熟悉的话,就可以轻松进行解决。

示例代码:

java">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>() {
				@Override
				public 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>() {
			@Override
			public 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.niftyadmin.cn/n/360813.html

相关文章

知识点梳理:ATTO 647N NHS ester,ATTO 647N 琥珀酰亚胺酯,荧光标记用于红色光谱区

ATTO 647N NHS ester&#xff0c;ATTO 647N SE&#xff0c;ATTO 647N 琥珀酰亚胺酯&#xff0c;ATTO 647N NHS酯 激发波长(nm)&#xff1a;646 发射波长(nm)&#xff1a;664 反应图像&#xff1a; 产品规格&#xff1a; 1.CAS号&#xff1a;N/A 2.分子式&#xff1a;N/A 3.分…

SpringBoot --- 基础篇

一、快速上手SpringBoot 1.1、概述 SpringBoot开发团队认为原始的Spring程序初始搭建的时候可能有些繁琐&#xff0c;这个过程是可以简化的&#xff0c;那原始的Spring程序初始搭建过程都包含哪些东西了呢&#xff1f;为什么觉得繁琐呢&#xff1f;最基本的Spring程序至少有一…

【Python基础】异常处理示例

文章目录 1. 什么是异常&#xff1f;2. 处理 ZeroDivisionError 异常3. 处理 FileNotFoundError 异常 1. 什么是异常&#xff1f; 在Python中&#xff0c;异常&#xff08;Exception&#xff09;是指在程序执行过程中发生的错误或异常情况。当程序遇到错误或无法正常执行时&am…

JNDI学习笔记

最近在研究JNDI注入漏洞&#xff0c;就先浅浅的学习以下JNDI相关知识。 JNDI对各种目录服务的实现进行抽象和统一化。 在 Java 应用中除了以常规方式使用名称服务(比如使用 DNS 解析域名)&#xff0c;另一个常见的用法是使用目录服务作为对象存储的系统&#xff0c;即用目录服务…

chatgpt赋能python:Python[:2]——简介和应用

Python [:2]——简介和应用 Python [:2]是一种流行的编程语言&#xff0c;其简单易用的语法使其成为许多人的首选编程语言之一。Python [:2]的迅速增长已经超越了其他编程语言&#xff0c;并且它正在成为各行各业中最有前途的编程语言之一。 Python 基础 Python [:2]的语法非…

速来!谷歌师兄的LeetCode刷题笔记开源了!

有小伙伴私聊我说刚开始刷LeetCode的时候&#xff0c;感到很吃力&#xff0c;刷题效率很低。我以前刷题的时候也遇到这个问题&#xff0c;直到后来看到这个谷歌师兄总结的刷题笔记&#xff0c;发现LeetCode刷题都是套路呀&#xff0c;掌握这些套路之后&#xff0c;就变得非常简…

Android进阶 View事件体系(二):从源码解析View的事件分发

Android进阶 View事件体系&#xff08;二&#xff09;&#xff1a;从源码解析View的事件分发 内容概要 本篇文章为总结View事件体系的第二篇文章&#xff0c;前一篇文章的在这里&#xff1a;Android进阶 View事件体系&#xff08;一&#xff09;&#xff1a;概要介绍和实现Vie…

Reinforcement Learning | 强化学习十种应用场景及新手学习入门教程

文章目录 1.在自动驾驶汽车中的应用2.强化学习的行业自动化3.强化学习在贸易和金融中的应用4.NLP&#xff08;自然语言处理&#xff09;中的强化学习5.强化学习在医疗保健中的应用6.强化学习在工程中的应用7.新闻推荐中的强化学习8.游戏中的强化学习9.实时出价——强化学习在营…