1859. 将句子排序

99 阅读2分钟

开启掘金成长之旅!这是我参与「掘金日新计划 · 12 月更文挑战」的第23天,点击查看活动详情

题目 leetcode.cn/

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

  • 我们可以给一个句子添加 从 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 不包含任何前导或者后缀空格。

代码

function sortSentence(s: string): string {
    let words = s.split(' ');
    let result = new Array(words.length);
    for(let k = 0; k < words.length; k++){
        let index = Number(words[k][words[k].length - 1]);
        result[index - 1] = words[k].substring(0, words[k].length - 1);
    }
    return result.join(' ');
};
  • 被打乱的单个单词由两部分组成,前面是单词本身,最后一位是它原本的位置顺序

  • 首先将给到的字符串句子按照空格划分为单个单词的字符串数组

  • 然后再根据数组长度定义一个拥有数组长度的空数组变量

  • 遍历字符串数组,将每个单词的最后一位字符取出(条件限制里面限定了单词数量不超过9个,所以确定每个单词字符串的最后一位一定是代表位置的数字)

  • 取出来的是字符串数字,需要转化为数字类型

  • 将当前单词的英文字母部分按照前面取出的顺序添加到刚开始定义的空数组中

    • 提取前面英文字符采用字符串的substring方法
    • 单词原本位置标记是从1开始的,数组下标是从0开始,所以确定位置时的原来位置都减去1
  • 最后得到按照原来顺序排列的字符串单词数组,将数组内每个单词按照中间空格的方式拼接起来即可