【我也想刷穿 LeetCode】1816. 截断句子

85 阅读2分钟

Offer 驾到,掘友接招!我正在参与2022春招打卡活动,点击查看活动详情

现在前端很多岗位面试需要有一定的算法基础,或者说经常刷算法的会优先考虑。

因此每天刷刷LeetCode非常有必要

在这之前我也刷过一些算法题,也希望以后也坚持刷,跟某掘友一样,我也想刷穿 LeetCode

一、题目描述

句子 是一个单词列表,列表中的单词之间用单个空格隔开,且不存在前导或尾随空格。每个单词仅由大小写英文字母组成(不含标点符号)。

例如,"Hello World"、"HELLO" 和 "hello world hello world" 都是句子。 给你一个句子 s​​​​​​ 和一个整数 k​​​​​​ ,请你将 s​​ 截断 ​,​​​使截断后的句子仅含 前 k​​​​​​ 个单词。返回 截断 s​​​​​​ 后得到的句子。

示例 1:

输入:s = "Hello how are you Contestant", k = 4
输出:"Hello how are you"
解释:
s 中的单词为 ["Hello", "how" "are", "you", "Contestant"]
前 4 个单词为 ["Hello", "how", "are", "you"]
因此,应当返回 "Hello how are you"

示例 2:

输入:s = "What is the solution to this problem", k = 4
输出:"What is the solution"
解释:
s 中的单词为 ["What", "is" "the", "solution", "to", "this", "problem"]
前 4 个单词为 ["What", "is", "the", "solution"]
因此,应当返回 "What is the solution"

示例 3:

输入:s = "chopper is not a tanuki", k = 5
输出:"chopper is not a tanuki"

二、思路分析

这题也比较简单

方法一,直接调用 api,这里用到一个小知识,split是有两个参数的,第二个参数决定切割后数组的最大长度,切割然后join就可以了

方法二,遍历 s,遇到空格就把 k - 1直到k===0,获取当前的索引,切割之前的字符串就可以了

三、代码实现

方法一


var truncateSentence = function (s, k) {
  return s.split(' ', k).join(' ')
};
方法二


var truncateSentence = function (s, k) {
  let idx = 0
  s += ' '
  for (let i = 0; i < s.length; i++) {
    if (s[i] === ' ') {
      k--
      idx = i
      if (k === 0) break
    }
  }
  return s.slice(0, idx)
};



四、总结

以上就是本道题的所有内容了,本系列会持续更,欢迎点赞、关注、收藏,另外如有其他的问题,欢迎下方留言给我,我会第一时间回复你,感谢~