日新刷题 - 1859. 将句子排序

153 阅读2分钟

一起养成写作习惯!这是我参与「掘金日新计划 · 4 月更文挑战」的第25天,点击查看活动详情

一 描述

1859. 将句子排序 - 力扣(LeetCode) (leetcode-cn.com)

一个 句子 指的是一个序列的单词用单个空格连接起来,且开头和结尾没有任何空格。每个单词都只包含小写或大写英文字母。

我们可以给一个句子添加 从 1 开始的单词位置索引 ,并且将句子中所有单词 打乱顺序 。

  • 比方说,句子 "This is a sentence" 可以被打乱顺序得到 "sentence4 a3 is2 This1" 或者 "is2 sentence4 This1 a3" 。

给你一个 打乱顺序 的句子 s ,它包含的单词不超过 9 个,请你重新构造并得到原本顺序的句子。

 

示例 1:

输入:s = "is2 sentence4 This1 a3"
输出:"This is a sentence"
解释:将 s 中的单词按照初始位置排序,得到 "This1 is2 a3 sentence4" ,然后删除数字。

示例 2:

输入:s = "Myself2 Me1 I4 and3"
输出:"Me Myself and I"
解释:将 s 中的单词按照初始位置排序,得到 "Me1 Myself2 and3 I4" ,然后删除数字。

提示:

  • 2 <= s.length <= 200
  • s 只包含小写和大写英文字母、空格以及从 1 到 9 的数字。
  • s 中单词数目为 1 到 9 个。
  • s 中的单词由单个空格分隔。
  • s 不包含任何前导或者后缀空格。

二 分析

根据打乱的句子数字条件进行前后排序,根据查询空格出现的次数计算出每个单词的个数,查询出单词数量就用单词数量便利,多少个单词便利多少次,比如第一次根据数量便利下标就是1,单词尾数和下标1挨个比较,依次放进空数组,再拼接成字符串返回~

遇到的问题:

  1. 没按照要求删除尾数,用python自带的切片删除尾数就好了
  2. 当一个单词时返回None,因为条件是根据空格判断的所以条件不成立;解决是加个if判断是否有空格,无空格直接删除数字返回
  3. 查询空格出现的次数,我用了find()函数,find是查询子字符串在字符串出现的位置,返回值是第一次子字符串的下标~ 改用count()就解决了!

三 答案

class Solution(object):
    def sortSentence(self, s):
        list = []
        if s.find(" ") <= 0:
            return s[:-1].strip()
        for i in range(1,s.count(" ")+2):
            for j in s.split(" "):
                if i == int(j[-1]):
                    list.append(j[:-1])
        return ' '.join(list)

s = "IFh1 MAkmfHFuRgJoZufiBqY5 XSSzgnouKoYDFLsjaq7 GyqqUBhirmFDCNDBk4 SjWMRc2 kMrOz8 HLnPMjPh3 VxZB6"
a = Solution()
print(a.sortSentence(s))