写点什么

LeetCode 题解:151. 翻转字符串里的单词,栈,JavaScript,详细注释

用户头像
Lee Chen
关注
发布于: 2021 年 04 月 29 日
LeetCode题解:151. 翻转字符串里的单词,栈,JavaScript,详细注释

原题链接:151. 翻转字符串里的单词


解题思路:


  1. 从前向后遍历s,非空格都为单词,将单词依次存入栈。

  2. 将单词依次出栈,用空格间隔,连接成新字符串,即可实现翻转。


/** * @param {string} s * @return {string} */var reverseWords = function (s) {  let stack = []; // 使用栈存储字符串中的单词  let word = ''; // 临时缓存单词  let result = ''; // 存储翻转后字符串
// 遍历字符串,查找所有单词 for (let i = 0; i < s.length; i++) { // 如果遇到空格,且已找到单词,就将其存入栈 if (s[i] === ' ' && word !== '') { stack.push(word); word = ''; // 单词入栈后,清空缓存 } else if (s[i] !== ' ') { // 如果遇到非空格字符,表示遇到了单词,将其存入word word += s[i]; } }
// 如果遍历完成后,还有单词,继续入栈 // 避免最后一个单词被忽略 if (word) { stack.push(word); }
// 将末尾单词第一个存入结果 result += stack.pop();
// 将栈中元素依次出栈,实现翻转 while (stack.length) { // 单词之间用空格隔开 result += ' ' + stack.pop(); }
// 返回结果 return result;};
复制代码


  1. 可以将s直接用空格切割成数组,即可成为一个栈。


/** * @param {string} s * @return {string} */var reverseWords = function (s) {  // 将字符串切割为数组,自然按照栈的顺序排列  let stack = s.trim().split(/\s+/);  let word = ''; // 临时缓存单词  let result = ''; // 存储翻转后字符串
// 如果遍历完成后,还有单词,继续入栈 // 避免最后一个单词被忽略 if (word) { stack.push(word); }
// 将末尾单词第一个存入结果 result += stack.pop();
// 将栈中元素依次出栈,实现翻转 while (stack.length) { // 单词之间用空格隔开 result += ' ' + stack.pop(); }
// 返回结果 return result;};
复制代码


发布于: 2021 年 04 月 29 日阅读数: 8
用户头像

Lee Chen

关注

还未添加个人签名 2018.08.29 加入

还未添加个人简介

评论

发布
暂无评论
LeetCode题解:151. 翻转字符串里的单词,栈,JavaScript,详细注释