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;
};
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值