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

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

[[423004]]

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

示例 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)

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

解题思路:

首先去除字符串左右空格

逐个读取字符串中的每个单词,依次放入双端队列的对头

再将队列转换成字符串输出(已空格为分隔符)

画图理解:

代码实现:

  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. }; 

 

责任编辑:武晓燕 来源: 三分钟学前端
相关推荐

2021-09-03 09:41:36

字符串时间复杂度

2016-12-30 13:37:50

字符串算法代码

2021-08-26 05:08:25

相邻重复项算法

2021-09-02 09:22:13

算法无重复字符

2013-05-06 10:54:08

字符串字符串匹配KMP算法

2023-12-15 10:27:01

暴力匹配算法Python字符串

2023-02-26 22:33:32

字符串排列算法

2016-12-30 13:32:24

字符串算法代码

2016-12-30 13:16:51

字符串算法代码

2013-05-06 10:49:21

Boyer-Moore算法字符串匹配

2021-11-12 09:44:03

字符串算法复杂度

2023-04-11 08:54:57

字符串匹配算法

2010-09-09 11:48:00

SQL函数字符串

2024-07-03 11:23:14

2009-08-11 10:26:49

C#算法C#字符串反转

2024-04-01 08:41:39

字符串.NET

2021-03-08 08:23:24

Java字符串截取

2021-12-21 11:39:01

数据结构算法同构字符串

2010-06-28 15:18:51

SQL Server

2016-12-29 17:14:41

回文串算法代码
点赞
收藏

51CTO技术栈公众号