题目描述

给定一个字符串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
说明

单词处理与排序算法详解

核心解题思路

本题需要对字符串中的单词进行双重处理:单词内部字符排序和单词间多重排序。解题关键在于:

  1. 单词内部处理:对每个单词的字符重新按字典序排序
  2. 单词间排序:按照三重规则排序
    • 规则1:按单词出现频率降序排列
    • 规则2:频率相同则按单词长度升序排列
    • 规则3:长度相同则按字典序升序排列

处理流程

  1. 分割字符串:将输入字符串按空格分割成单词列表
  2. 单词内部排序:对每个单词的字符进行字典序排序
  3. 统计频率:计算每个处理后的单词出现次数
  4. 多重排序:按照三重规则对单词列表排序
  5. 结果拼接:将排序后的单词用空格连接

完整代码实现

def process_string(s):# 1. 分割字符串为单词列表words = s.split()# 2. 对每个单词内部字符排序sorted_words = []for word in words:# 将单词转为字符列表排序后重新组合sorted_word = ''.join(sorted(word))sorted_words.append(sorted_word)# 3. 统计处理后的单词频率from collections import Counterword_freq = Counter(sorted_words)# 4. 多重排序:频率降序 > 长度升序 > 字典序升序# 使用元组作为排序键:(-频率, 长度, 单词)sorted_list = sorted(sorted_words,key=lambda word: (-word_freq[word], len(word), word))# 5. 拼接最终结果return ' '.join(sorted_list)# 主程序
if __name__ == "__main__":input_str = input().strip()output = process_string(input_str)print(output)

算法原理解析

1. 单词内部排序

sorted_word = ''.join(sorted(word))
  • sorted(word):将单词拆分为字符列表并按ASCII值排序
  • ''.join():将排序后的字符重新组合为字符串
  • 示例
    • “apple” → [‘a’,‘p’,‘p’,‘l’,‘e’] → 排序为[‘a’,‘e’,‘l’,‘p’,‘p’] → “aelpp”
    • “This” → [‘T’,‘h’,‘i’,‘s’] → 排序为[‘T’,‘h’,‘i’,‘s’] → “This” (已有序)

2. 频率统计

from collections import Counter
word_freq = Counter(sorted_words)
  • Counter类高效统计单词出现次数
  • 返回字典:{单词: 出现次数}
  • 示例:对于输入[“in”, “eht”, “in”] → 频率统计为{‘in’:2, ‘eht’:1}

3. 多重排序

key=lambda word: (-word_freq[word], len(word), word)
  • 第一关键字-word_freq[word]
    • 负号实现降序效果(频率越高,负值越小)
    • 示例:频率2变为-2,频率1变为-1,-2 < -1 → 频率2排在前面
  • 第二关键字len(word)
    • 按单词长度升序排列
    • 长度短的单词排在前面
  • 第三关键字word
    • 按字典序升序排列
    • 字典序小的单词排在前面(按字符ASCII值比较)

示例解析

示例1:输入"This is an apple"

  1. 单词内部排序

    • “This” → “This”(字符已有序)
    • “is” → “is”
    • “an” → “an”
    • “apple” → “aelpp”
  2. 频率统计

    • 所有单词出现1次
  3. 多重排序

    • 频率相同 → 比较长度
    • 长度:“an”(2)、“is”(2) < “This”(4) < “aelpp”(5)
    • "an"和"is"长度相同 → 比较字典序:“an” < “is”(‘a’(97) < ‘i’(105))
  4. 最终排序

    • [“an”, “is”, “This”, “aelpp”]
    • 输出:“an is This aelpp”

示例2:输入"My sister is in the house not in the yard"

  1. 单词内部排序

    • “My” → “My”
    • “sister” → “eirsst”
    • “is” → “is”
    • “in” → “in”(两次)
    • “the” → “eht”(两次)
    • “house” → “ehosu”
    • “not” → “not”
    • “yard” → “adry”
  2. 频率统计

    • “in”:2, “eht”:2, 其他单词:1
  3. 多重排序

    • 频率降序:"in"和"eht"优先(频率2 > 1)
    • 长度升序
      • “in”(2) < “eht”(3)(长度短的在前)
      • 其他单词:(“My”:2, “is”:2) < “not”:3 < “adry”:4 < “ehosu”:5 < “eirsst”:6
    • 字典序升序
      • "in"和"eht"内部相同
      • “My” < “is”(‘M’(77) < ‘i’(105))
  4. 最终排序

    • [“in”,“in”,“eht”,“eht”,“My”,“is”,“not”,“adry”,“ehosu”,“eirsst”]
    • 输出:“in in eht eht My is not adry ehosu eirsst”

总结

实际应用

  1. 文本分析:词频统计与排序
  2. 数据清洗:统一单词格式
  3. 搜索引擎:搜索结果排序
  4. 自然语言处理:词汇规范化
  5. 日志分析:高频事件识别

通过这个解法,初学者可以掌握:

  • 字符串操作的核心技巧
  • 多重排序的实现方法
  • 频率统计的高效方式
  • 复杂问题的分解思路
  • Python内置函数的灵活应用

这种"分治+排序"的方法是处理字符串排序问题的通用模式,理解后可以扩展到更复杂的文本处理场景中。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/bicheng/84976.shtml
繁体地址,请注明出处:http://hk.pswp.cn/bicheng/84976.shtml
英文地址,请注明出处:http://en.pswp.cn/bicheng/84976.shtml

如若内容造成侵权/违法违规/事实不符,请联系英文站点网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

http的缓存问题

一句话概括&#xff1a;浏览器请求资源的时候&#xff0c;会首先检查本地是否有缓存&#xff0c;减少向服务器请求的次数 一、缓存类型&#xff1a; 1. 强缓存&#xff08;本地缓存&#xff09;&#xff1a;直接读本地&#xff0c;不发请求 控制方式&#xff1a; ① Cache-C…

【网络安全】SRC漏洞挖掘思路/手法分享

文章目录 Tip1Tip2Tip3Tip4Tip5Tip6Tip7Tip8Tip9Tip10Tip11Tip12Tip13Tip14Tip15Tip16Tip17Tip18Tip19Tip20Tip21Tip22Tip23Tip24Tip25Tip26Tip27Tip28Tip29Tip30Tip1 “复制该主机所有 URL”:包含该主机上的所有接口等资源。 “复制此主机里的链接”:包括该主机加载的第三…

「Linux中Shell命令」Shell常见命令

知识点及案例解析 1. who 命令 功能:显示当前登录系统的用户信息,包括用户名、终端、登录时间、IP等。 案例: who输出示例: root tty1 2025-06-13 19:42 root pts/0 2025-06-13 19:45 (192.168.226.1)解析: 显示两个用户登录信息: 第一列(用…

StampedLock入门教程

文章目录 一、理解“戳” (Stamp)二、为什么 StampedLock 能提高读性能&#xff1f;秘密在于“乐观读”StampedLock性能对比性能对比结果图 总结 StampedLock完整演示代码对代码的疑问之处问题一&#xff1a;为什么 demonstrateOptimisticReadFailure 中写线程能修改成功&#…

基于云计算的振动弦分析:谐波可视化与波动方程参数理解-AI云计算数值分析和代码验证

振动弦方程是一个基础的偏微分方程&#xff0c;它描述了弹性弦的横向振动。其应用范围广泛&#xff0c;不仅可用于模拟乐器和一般的波动现象&#xff0c;更是数学物理以及深奥的弦理论中的重要基石。 ☁️AI云计算数值分析和代码验证 振动弦方程是描述固定两端弹性弦横向振动的…

Qt .pro配置gcc相关命令(三):-W1、-L、-rpath和-rpath-link

目录 1.Linux 动态库相关知识 1.1.动态库查找路径 1.2.查看程序依赖的动态库 1.3.修改动态库查找路径的方法 1.4.动态链接器缓存管理 2.-Wl参数 3.-L选项&#xff08;编译时路径&#xff09; 4.-rpath参数(运行时路径) 5.-rpath-link 参数 6.常见问题与解决方案 7.总…

Hoppscotch

官方地址 xixiaxiazxiaxix下载 • Hoppscotch Hoppscotch 是一款轻量级、基于 Web 的 API 开发套件&#xff0c;其核心功能和特点如下&#xff1a; 核心功能3 交互式 API 测试&#xff1a;允许用户实时发送请求并查看响应&#xff0c;方便记录 API 行为&#xff0c;在记录响…

RabbitMQ 知识详解(Java版)

RabbitMQ 知识详解&#xff08;Java版&#xff09; RabbitMQ 是一个开源的消息代理&#xff0c;实现了高级消息队列协议&#xff08;AMQP&#xff09;。它用于在分布式系统中实现应用解耦、异步通信和流量削峰。 核心概念 生产者(Producer)&#xff1a;发送消息的应用消费者(…

Flink task、Operator 和 UDF 之间的关系

要真正驾驭 Flink 并构建出高效、稳定、可扩展的流处理应用&#xff0c;仅仅停留在 API 的表面使用是远远不够的。深入理解其内部的运行机制&#xff0c;洞悉数据从代码到分布式执行的完整生命周期&#xff0c;以及明晰各个核心组件之间错综复杂而又协同工作的关系&#xff0c;…

Veeam Backup Replication系统的安装与使用

Veeam Backup & Replication系统安装与使用 系统简介 核心功能 备份与恢复&#xff1a;专注于虚拟化环境&#xff08;如VMware和Hyper-V&#xff09;的备份与恢复&#xff0c;支持物理服务器和云环境。快速恢复&#xff1a;提供即时恢复功能&#xff0c;可在几分钟内恢复…

十四、【ESP32全栈开发指南:搭建轻量级HTTP服务器】

一、HTTP协议基础 HTTP&#xff08;Hyper Text Transfer Protocol&#xff09;作为互联网基础协议&#xff0c;采用请求-响应模型工作&#xff1a; 1.1 HTTP请求组成 GET /uri?query1value1 HTTP/1.1 // 请求行&#xff08;方法URI协议版本&#xff09; Host: example…

java中LinkedList和ArrayList的区别和联系?

我们被要求解释Java中LinkedList和ArrayList的区别和联系。下面将分别从实现原理、性能特点、使用场景等方面进行详细说明&#xff0c;并总结它们的相同点和不同点。 # 一、联系&#xff08;共同点&#xff09; 1. 都实现了List接口&#xff0c;因此具有List接口的所有方法&…

明远智睿SD2351核心板:边缘计算时代的工业级核心引擎深度解析

在工业4.0与物联网深度融合的背景下&#xff0c;边缘计算设备正从单一功能模块向高集成度、智能化平台演进。明远智睿推出的SD2351核心板&#xff0c;凭借其异构计算架构、工业级接口资源和全栈技术生态&#xff0c;重新定义了边缘计算设备的性能边界。本文将从技术架构、场景适…

Flask 动态模块注册

目录 1. 项目概述2. 项目结构3. 核心组件解析3.1 动态模块注册系统 (api/__init__.py)3.2 应用程序入口 (setup_demo.py) 4. 模块开发指南4.1 标准模块 (*_app.py)4.2 SDK模块 (sdk/*.py) 5. URL路径规则6. 如何使用6.1 启动应用6.2 添加新模块 7. 工作原理 1. 项目概述 这个项…

JVM 内存、JMM内存与集群机器节点内存的联系

目录 1、JVM 内存 1.1、分配机制 1.2、jvm模型位置 1.3、字节码内存块 2、JMM内存 2.1、JMM模型 2.2、工作流程图 1、工作内存与主内存的交互 2. 多线程下的主内存与堆内存交互 2.3、 主内存与工作内存的同步方案 1、volatile 2、synchronized 3、final 3、内存使…

学习昇腾开发的第一天--环境配置

1、昇腾社区官网&#xff1a;昇腾社区官网-昇腾万里 让智能无所不及 2、产品-->选择开发者套件-->点击制卡工具的下载&#xff1a;资源-Atlas 200I DK A2-昇腾社区 3、如果制卡工具不能使用在线制卡&#xff0c;可以下载镜像到本地使用本地制卡&#xff1a;Linux系统制…

Android WebView 深色模式适配方案总结

Android WebView 深色模式适配方案总结 在 Android WebView 中适配深色模式&#xff08;Dark Mode&#xff09;是一个常见的需求&#xff0c;尤其是当加载的网页没有原生支持 prefers-color-scheme 时。本文将介绍 3 种主流方案&#xff0c;并分析它们的优缺点&#xff0c;帮助…

项目练习:使用mybatis的foreach标签,实现union all的拼接语句

文章目录 一、需求说明二、需求分析三、代码实现四、报表效果 一、需求说明 在sql查询数据后&#xff0c;对数据分组统计。并最后进行总计。 二、需求分析 最终&#xff0c;我想用sql来实现这个统计和查询的功能。 那么&#xff0c;怎么又查询&#xff0c;又统计了&#xf…

7.7 Extracting and saving responses

Chapter 7-Fine-tuning to follow instructions 7.7 Extracting and saving responses 在本节中&#xff0c;我们保存测试集响应以便在下一节中评分&#xff0c;除此之外保存模型的副本以供将来使用。 ​ 首先&#xff0c;让我们简单看看finetuned模型生成的响应 torch.manu…

计算机网络第3章(上):数据链路层全解析——组帧、差错控制与信道效率

目录 一、数据链路层的功能二、组帧2.1 字符计数法&#xff08;Character Count&#xff09;2.2 字符填充法&#xff08;Character Stuffing&#xff09;2.3 零比特填充法2.4 违规编码法 三、差错控制3.1 检错编码&#xff08;奇偶校验码&#xff09;3.2 循环冗余校验&#xff…