当前位置: 首页 > news >正文

【华为OD机考】华为OD笔试真题解析(10)--字符串重新排序

题目描述

给定一个字符串s,包含以空格分隔的若干个单词,请对s进行如下处理后输出:

  1. 单词内部调整:对每个单词字母重新按字典序排序;
  2. 单词间顺序调整:
    • 统计每个单词出现的次数,并按次数降序排列
    • 次数相同时,按单词长度升序排列
    • 次数和单词长度均相同时,按字典序升序排列

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

输入描述

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

输出描述

重新排序后的字符串,每个单词间隔1个空格,且首尾无空格。

示例描述

示例一

输入:

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

解题思路

  1. 用空格分隔原始字符串,并用字典统计词频。
  2. 使用sorted函数按次数降序、单词长度升序、按字典序升序排列。
  3. 根据排序之后的字典,转换成字符串列表,注意单词需要按照词频进行重复记录。
  4. join重新转成字符串并返回。

解题代码

from collections import defaultdict


def solve_method(string):
    words = string.split()
    word_freqs = defaultdict(int)
    for word in words:
        rearrange_word = "".join(sorted(word))
        word_freqs[rearrange_word] += 1

    sorted_freqs = sorted(word_freqs.items(),
                          key=lambda x: (-x[1], len(x[0]), x[0]))

    result = []
    for (word, freqs) in sorted_freqs:
        result.extend([word] * freqs)

    result = " ".join(result)
    return result

if __name__ == '__main__':
    assert solve_method("This is an apple") == "an is This aelpp"
    assert solve_method("My sister is in the house not in the yard") \
           == "in in eht eht My is not adry ehosu eirsst"
http://www.dtcms.com/a/21109.html

相关文章:

  • 使用 Python 爬虫和 FFmpeg 爬取 B 站高清视频
  • 【Python】错误异常
  • 【深度学习】计算机视觉(CV)-目标检测-DETR(DEtection TRansformer)—— 基于 Transformer 的端到端目标检测
  • DAY04 Object、Date类、DateFormat类、Calendar类、Math类、System类
  • 什么是计算机总线?
  • 【大模型】DeepSeek 高级提示词技巧使用详解
  • Android Studio报错:Could not get unknown property ‘kotlin_version‘
  • Kubernetes控制平面组件:etcd高可用集群搭建
  • c语言(初阶函数)完结
  • 函数防抖和节流
  • AI 语言模型发展史:统计方法、RNN 与 Transformer 的技术演进
  • Spring Boot01(注解、)---java八股
  • 001-监控你的文件-FSWatch-C++开源库108杰
  • Typora导出word文件详细安装教程
  • 使用 Dify + DeepSeek 打造自己的本地知识库问答
  • 框架ThinkPHP(小迪网络安全笔记~
  • 计算机组成原理—— 外围设备(十三)
  • 配置Open-R1,评测第三方蒸馏模型的性能2
  • 2025百度快排技术分析:模拟点击与发包算法的背后原理
  • 一个简单的ubuntu/开发板初始化脚本
  • Redis 09章——哨兵(sentinel)
  • HTML元素
  • MATLAB中lookBehindBoundary函数用法
  • 滑动窗口——优先队列写法
  • 分享一个解梦 Chrome 扩展 —— 周公 AI 解梦
  • sql盲注脚本
  • 【数据结构入门 65 题】目录
  • 字符串(典型算法思想)—— OJ例题算法解析思路
  • Anaconda3 介绍和安装
  • 静默安装OGG for MySQL微服务版本,高效开展数据同步和迁移