欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 财经 > 产业 > 华为OD机试题-字符串重新排列

华为OD机试题-字符串重新排列

2025/9/25 2:39:41 来源:https://blog.csdn.net/longlongqin/article/details/140262958  浏览:    关键词:华为OD机试题-字符串重新排列

题目描述

https://www.cnblogs.com/smile-programmer/p/17322920.html

字符串重新排列
给定一个字符串s,s包括以空格分隔的若干个单词,请对s进行如下处理后输出:
1、单词内部调整:对每个单词字母重新按字典序排序
2、单词间顺序调整:
1)统计每个单词出现的次数,并按次数降序排列2)次数相同,按单词长度升序排列
3)次数和单词长度均相同,按字典升序排列请输出处理后的字符串,每个单词以一个空格分隔。
输入描述:
一行字符串,每个字符取值范围:【a-ZA-Z0-9】以及空格,字符串长度范围:【1,1,1000】
例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 

题解

    public static String processString(String s) {// step1: 分割为单词String[] words = s.split("\\s+");// step2: 按照字典序排序for (int i = 0; i < words.length; i++) {char[] charArray = words[i].toCharArray();Arrays.sort(charArray);words[i] = new String(charArray);}// step3: 统计每个单词的出现次数HashMap<String, Integer> wordCount = new HashMap<>();for (String word : words) {wordCount.put(word, wordCount.getOrDefault(word, 0) + 1);}// step4: 按照单词出现次数降序、单词长度升序、字典升序排序 单词ArrayList<Map.Entry<String, Integer>> sortedWords = new ArrayList<>(wordCount.entrySet());sortedWords.sort((a, b) -> {// 出现次数降序降序排序int countCompare = b.getValue().compareTo(a.getValue());if (countCompare != 0) return countCompare;// 单词长度升序排序int lengthCompare = a.getKey().length() - b.getKey().length();if (lengthCompare != 0) return lengthCompare;// 字典升序排序return a.getKey().compareTo(b.getKey());});// step5: 构造结果字符串StringBuilder result = new StringBuilder();for (Map.Entry<String, Integer> entry : sortedWords) {String key = entry.getKey();int count = entry.getValue();for (int i = 0; i < count; i++) {result.append(key).append(" ");}}// 移除末尾的空格并返回结果return result.toString().trim();}

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词