华为OD2023(A卷)基础题2【字符串重新排列】

本文为博客 VIP 文章,开通 VIP 后可阅读全文

开通 VIP

题2.字符串重新排列

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

主要考察算法和数据结构:字符串排序、对象的使用、数组的排序和遍历

以下是按步骤罗列的解题思路:

  1. 首先将输入的字符串按照空格分割成单词数组;
  2. 对每个单词进行内部调整,即重新按照字典序排序。可以使用现成的排序函数,也可以手写一段排序代码;
  3. 使用一个对象来统计每个单词出现的次数,并按要求进行排序。排序时,可以使用自定义比较函数来实现多级排序,需要注意考虑次数、长度和字典序的优先级关系。最后将排完序的单词拼接成字符串输出。

java实现如下:

import java.util.*;

public class Main {
      public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        String s = scanner.nextLine();

        // 将字符串按空格分割成单词
        String[] words = s.split(" ");

        // 对每个单词内部进行字典序排序
        for (int i = 0; i < words.length; i++) {
            char[] wordChars = words[i].toCharArray();
            Arrays.sort(wordChars);
            words[i] = new String(wordChars);
        }

        // 统计每个单词出现的次数
        Map<String, Integer> wordCountMap = new HashMap<>();
        for (String word : words) {
            wordCountMap.put(word, wordCountMap.getOrDefault(word, 0) + 1);
        }

        // 对单词排序,排序规则如题目所述
        Arrays.sort(words, (w1, w2) -> {
            int count1 = wordCountMap.get(w1);
            int count2 = wordCountMap.get(w2);
            if (count1 != count2) {
                return count2 - count1; // 次数相同,按次数降序排列
            } else if (w1.length() != w2.length()) {
                return w1.length() - w2.length(); // 次数相同,按单词长度升序排列
            } else {
                return w1.compareTo(w2); // 次数和单词长度均相同,按字典升序排列
            }
        });

        // 输出处理后的字符串
        for (int i = 0; i < words.length; i++) {
            if (i != 0) {
                System.out.print(" ");
            }
            System.out.print(words[i]);
        }
    }
}

C++实现如下:

#include <iostream>
#include <algorithm>
#include <vector>
#include <unordered_map>

using namespace std;

string wordSort(const string& word) {
   
   
    /**
     * 对每个单词的字母重新按字典序排序
     */
    string sorted_word = word;
    sort(sorted_word.begin(), sorted_word.end());
    return sorted_word;
}

string rearrangeString(const string& s) {
   
   
    /**
     * 对字符串s进行重新排列
     */
    // 将字符串s分割成单词列表
    vector<string> words;
    string word;
华为OD机试真字符串重新排列(C++&java&python)满分 详细代码注释 代码解读 已支持(C++&java&python)满分 详细代码注释 代码解读 阅读详情

相关推荐

华为OD机试 - 字符串重新排列字符串重新排序(Java)

一行字符串,每个字符取值范围:[a-zA-z0-9]以及空格,字符串长度范围:[1,1000]需要注意的是,先进行单词内部调整,然后再进行单词间顺序。1、单词内部调整:对每个单词字母重新按字典序排序。请输出处理后的字符串,每个单词以一个空格分隔。1)统计每个单词出现的次数,并按次数降序排列。输出处理后的字符串,每个单词以一个空格分隔。3)次数和单词长度均相同,按字典升序排列。2)次数相同,按单词长度升序排列。

qq_34143141的博客 234

华为机试(JAVA)真Od-字符串重新排序

华为机试(JAVA)真Od-字符串重新排序

qq_30402163的博客 1099

华为OD2023机试真字符串重新排序】

【代码】华为OD2023机试真字符串重新排序】

J0H的博客 447

华为OD机试 - 字符统计及重排(JS)

因此排序时,如果遇到次数相同的,则需要判断比较的两个字母是否 都为大写 或者 都为小写,若是,则此时按照ASCII码值升序,若不是,则小写字母排在前面,大写字母排在后面。自然顺序排序,看用例1,应该就是ASCII升序。而后面又要求,小写字母在大写字母之前,小写字母的ASCII码值是大于大小字母的,因此这里又相当于ASCII降序。给出一个仅包含字母的字符串,不包含空格,统计字符串中各个字母(区分大小写)出现的次数,按照字母出现次数从大到小的顺序输出各个字母和字母次数,用英文分号分隔,注意末尾的分号;

m0_46181452的博客 261

2026华为OD机试(JavaScript)真【E+A+B+C+D】目录+在线OJ

华为OD机试真库【E+A+B+C+D】目录,JavaScript实现。

MISAYAONE的博客 8万+

2026华为OD机试(C语言)真【E+A+B+C+D】目录+在线OJ

华为OD机试真库【E+A+B+C+D】目录,C语言实现。

MISAYAONE的博客 11万+

2026华为OD机试(Python)真【E+A+B+C+D】目录+在线OJ

华为OD机试真库【E+A+B+C+D】目录,Python实现。

MISAYAONE的博客 28万+

2026华为OD机试(C++)真【E+A+B+C+D】目录+在线OJ

华为OD机试真库【E+A+B+C+D】目录,C++实现。

MISAYAONE的博客 20万+

2026华为OD机试(JAVA&Go)真【E+A+B+C+D】目录+在线OJ

华为OD机试真库【E+A+B+C+D】目录,Java实现。

MISAYAONE的博客 34万+

华为OD机试c++/java/python 真2023 Q1】

最后收集了华为OD机试前线最新战况,快来看看刚考完的小伙伴们都考到了哪些目吧! 是不是有点迫不及待了? 对于这些别人考过的真一定要掌握熟练,说不定你也会考到哦!

goldarmour的博客 8176

华为OD机试-2023-考点分类

2022年11月以后,OD机试换了新库,新库考察的算法比较偏,目难度加大。了解到部分同学的一些需求,博主根据考点对目进行了分类,如果时间紧迫,可以针对特 定型优先选择一两道进行练习。

goldarmour的博客 7553

2023最新华为OD机考

2023最新OD机考基础 100 分进阶 200 分 基础 100 分 编号 目 时间 1 字符串重新排列 22Q4 2 租车骑绿岛 22Q4 3 无向图染色 22Q4 4 单向链表中间节点 22Q4 5 不包含101的数 22Q4 6 最多颜色的车辆 22Q4 7 完美走位 22Q4 8 真正的密码 22Q4 9 积木最远距离 22Q4 10 打印机队列 22Q4 11 日志首次上报最多积分 22Q4 12 二元组个数 22Q4

J0H的博客 957

【新2023Q2JAVA】华为OD机试 - 字符串重新排序

参加华为od机试,一定要注意不要完全背诵代码,需要理解之后模仿写出,通过率才会高。重新排序后的字符串,每个单词间隔 1 个空格,且首尾无空格。👇 全网 6000+人正在学习的 爬虫专栏 👇👇👇👇。请输出处理后的字符串,每个单词以一个空格分隔。

梦想橡皮擦,专栏100例写作模式先行者,现象级专栏 《Python 爬虫 100 例》作者、《滚雪球学 Python 专栏》原创者 1万+

华为OD机试 2023 A 库目录

图论 / 最小生成树(Prim算法、Kruskal算法)最多获得的短信条数、云短信平台优惠活动。动态规划 / 背包DP / 完全背包。动态规划 / 背包DP / 01背包。动态规划 / 背包DP / 多重背包。二分查找 + 贪心算法 / 动态规划。动态规划 / 背包DP / 01背包。积木最远距离、相同数字的积木游戏。区间问 / 最大不相交区间数量。区间交叠问、最少数量线段覆盖。冗余覆盖、最左侧冗余覆盖子串。数据结构 / 栈 / 单调栈。处理器问、AI处理器组合。区间问 / 最大重叠区间。

u012657708的博客 178

华为OD机试】真A-字符串重新排列(Python)

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

u014481728的博客 610

【满分】【华为OD机试真2023 JAVA&JS】分界线

分界线 时间限制:1s空间限制:32MB限定语言:不限 目描述:电视剧《分界线》里面有一个片段,男主为了向警察透露案件细节,且不暴露自己,于是将报刊上的字剪切下来,剪拼成匿名信。

qq_34465338的博客 6021

华为OD机试用JS实现 -【字符串重新排序】(2023-Q2)

参加华为od机试,一定要注意不要完全背诵代码,需要理解之后模仿写出,通过率才会高。重新排序后的字符串,每个单词间隔 1 个空格,且首尾无空格。。请输出处理后的字符串,每个单词以一个空格分隔。

梦想橡皮擦,专栏100例写作模式先行者,现象级专栏 《Python 爬虫 100 例》作者、《滚雪球学 Python 专栏》原创者 1万+

【100%通过率】华为OD机试真 JavaScript 实现【字符串重新排列】【2023 Q1 | 100分】

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

MISAYAONE的博客 1万+
上一篇: 华为OD2023(A卷)基础题1【租车骑绿岛】
下一篇: 华为OD2023(A卷)基础题3【箱子之字形摆放】
大司码
博客等级 码龄10年 18粉丝 · 42原创
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值