每日算法:翻转字符串里的单词

清疚 2022-09-09 11:57 258阅读 0赞

点击上方 三分钟学前端,关注公众号

回复交流,加入前端编程面试算法每日一题群

面试官也在看的前端面试资料

给定一个字符串,逐个翻转字符串中的每个单词。

示例 1:

  1. 输入: "the sky is blue"
  2. 输出: "blue is sky the"

示例 2:

  1. 输入: " hello world! "
  2. 输出: "world! hello"
  3. 解释: 输入字符串可以在前面或者后面包含多余的空格,但是反转后的字符不能包括。

示例 3:

  1. 输入: "a good example"
  2. 输出: "example good a"
  3. 解释: 如果两个单词间有多余的空格,将反转后单词间的空格减少到只含一个。

说明:

  • 无空格字符构成一个单词。
  • 输入字符串可以在前面或者后面包含多余的空格,但是反转后的字符不能包括。
  • 如果两个单词间有多余的空格,将反转后单词间的空格减少到只含一个。

解法一:正则 + JS API

  1. var reverseWords = function(s) {
  2. return s.trim().replace(/\s+/g, ' ').split(' ').reverse().join(' ')
  3. };

解法二:双端队列(不使用 API)

双端队列,故名思义就是两端都可以进队的队列

解题思路:

  • 首先去除字符串左右空格
  • 逐个读取字符串中的每个单词,依次放入双端队列的对头
  • 再将队列转换成字符串输出(已空格为分隔符)

画图理解:

deeec001b1d1e351c76508e56bd67c07.png ce2a422eb2e4f0f2a5db37e4fa7d5007.png 3d39909644da030c1bd012b2419d0b73.png

代码实现:

  1. var reverseWords = function(s) {
  2. let left = 0
  3. let right = s.length - 1
  4. let queue = []
  5. let word = ''
  6. while (s.charAt(left) === ' ') left ++
  7. while (s.charAt(right) === ' ') right --
  8. while (left <= right) {
  9. let char = s.charAt(left)
  10. if (char === ' ' && word) {
  11. queue.unshift(word)
  12. word = ''
  13. } else if (char !== ' '){
  14. word += char
  15. }
  16. left++
  17. }
  18. queue.unshift(word)
  19. return queue.join(' ')
  20. };

最后

欢迎关注「三分钟学前端」,回复「交流」自动加入前端三分钟进阶群,每日一道编程算法面试题(含解答),助力你成为更优秀的前端开发!

号内回复:

网络」,自动获取三分钟学前端网络篇小书(90+页)

JS」,自动获取三分钟学前端 JS 篇小书(120+页)

算法」,自动获取 github 2.9k+ 的前端算法小书

面试」,自动获取 github 23.2k+ 的前端面试小书

简历」,自动获取程序员系列的 120 套模版

》》面试官也在看的前端面试资料《《

“在看和转发”就是最大的

发表评论

表情:
评论列表 (有 0 条评论,258人围观)

还没有评论,来说两句吧...

相关阅读