1451. 重新排列句子中的单词

目录

按单词长度排序句子——Python实现及详解

题目描述

解题分析

主要任务

关键点

解题思路和步骤

代码实现

示例说明

方法比较与优化建议

总结


按单词长度排序句子——Python实现及详解

题目描述

给定一个句子 text,句子的格式满足以下条件:

  • 句子的首字母大写。
  • 句子中的每个单词由单个空格分隔。
  • 句子里包含多个单词。

请将句子中的单词重新排列,使所有单词按单词长度升序排列;如果两个单词长度相同,则保持它们在原句子中的相对顺序不变。

最后,返回一个新的句子,要求:

  • 句子首字母大写。
  • 其余字母均小写。
  • 单词间用单个空格分隔。

解题分析

主要任务

  1. 按单词长度升序排序:根据单词的字符数排序。
  2. 保持相同长度单词的相对顺序:即“稳定排序”。
  3. 格式化输出
    • 首字母大写。
    • 其余小写。
    • 单词之间单空格。

关键点

  • Python 的内置排序函数 sorted() 和列表的 sort() 方法是稳定排序算法,保证长度相同时元素相对顺序不变。
  • 原句第一个单词首字母大写,其他字母小写;重新排序后,也要保持首个单词首字母大写。
  • 原句单词中首字母可能大写(如句首),需要先统一转小写后排序,避免大小写影响排序结果和相对顺序。

解题思路和步骤

  1. 拆分句子
    使用 split() 把句子拆成单词列表。
  2. 统一小写
    为方便排序和比较,先把所有单词转为小写,确保稳定排序不受大小写影响。
  3. 排序
    利用 sorted()list.sort(),以单词长度为键进行排序,保证稳定性。
  4. 首字母大写处理
    排序后将第一个单词首字母大写,其他单词全部小写。
  5. 拼接句子
    用空格把单词重新合并成句子。

代码实现

class Solution:
    def arrangeWords(self, text: str) -> str:
        # 拆分句子成单词列表
        words = text.split()
        
        # 转成小写方便排序,保持原单词索引以保证稳定排序
        lowered_words = [w.lower() for w in words]
        
        # 记录原索引,方便排序后保持相同长度单词原顺序
        indexed_words = list(enumerate(lowered_words))
        
        # 按单词长度排序,稳定排序保证长度相同单词相对顺序不变
        indexed_words.sort(key=lambda x: len(x[1]))
        
        # 排序后的单词(小写)
        sorted_words = [w for i, w in indexed_words]
        
        # 首字母大写,其余小写
        sorted_words[0] = sorted_words[0].capitalize()
        
        # 拼接成句子返回
        return ' '.join(sorted_words)

示例说明

假设输入:

text = "Keep calm and code on"

拆分单词

["Keep", "calm", "and", "code", "on"]

转换为小写

["keep", "calm", "and", "code", "on"]

附带索引,便于稳定排序

[(0, "keep"), (1, "calm"), (2, "and"), (3, "code"), (4, "on")]

按单词长度排序

  • "on" (长度 2)
  • "and" (长度 3)
  • "keep" (长度 4)
  • "calm" (长度 4)
  • "code" (长度 4)

保持相同长度顺序不变,所以 "keep", "calm", "code" 的顺序不变。

排序结果:

[(4, "on"), (2, "and"), (0, "keep"), (1, "calm"), (3, "code")]

提取排序后的小写单词

["on", "and", "keep", "calm", "code"]

首字母大写,其余小写

["On", "and", "keep", "calm", "code"]

合成句子

"On and keep calm code"

方法比较与优化建议

  • 简单排序:直接对原句单词排序,可能因为首字母大写影响稳定排序,导致长度相同单词顺序错乱。
  • 统一小写排序:先全部转换成小写,排序后再调整首字母大小写,保证稳定排序效果和正确格式。
  • 使用枚举索引:通过给单词附带原索引,实现稳定排序,防止长度相同单词顺序被破坏。
  • 首字母大小写处理:排序后将第一个单词首字母大写,保证格式正确。

该方法简单、易懂,时间复杂度为 O(n log n)(排序主导),空间复杂度为 O(n)(存储辅助索引和列表)。


总结

通过对句子单词按长度排序,并保持相同长度单词的原始相对顺序,我们可以利用 Python 的稳定排序特性完成任务。统一单词小写处理可以避免大小写带来的干扰,最后再调整首字母大小写,保证输出格式符合题目要求。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值