当前位置: 首页 > news >正文

学习记录:js算法(十八): 反转字符串中的单词

文章目录

    • 反转字符串中的单词
      • 我的思路
      • 网上思路
    • 总结

反转字符串中的单词

给你一个 字符串 s ,请你反转字符串中 单词 的顺序。
单词 是由非空格字符组成的字符串。s 中使用至少一个空格将字符串中的 单词 分隔开。
返回 单词 顺序颠倒且 单词 之间用单个空格连接的结果字符串。
注意:输入字符串 s 中可能会存在前导空格、尾随空格或者单词间的多个空格。返回的结果字符串中,单词间应当仅用单个空格分隔,且不包含任何额外的空格。

示例 1:
输入:s = "the sky is blue"
输出:"blue is sky the"示例 2:
输入:s = "  hello world  "
输出:"world hello"
解释:反转后的字符串中不能存在前导空格和尾随空格。示例 3:
输入:s = "a good   example"
输出:"example good a"
解释:如果两个单词间有多余的空格,反转后的字符串需要将单词间的空格减少到仅有一个。

我的思路
试试双指针解法
网上思路
因为双指针的解法我写了,这次看到了循环,就记录一下

我的思路

var reverseWords = function (s) {s = s.trim().replace(/\s+/g, ' ');let words = s.split(' ');let left = 0;let right = words.length - 1;while (left < right) {[words[left], words[right]] = [words[right], words[left]];left++;right--;}return words.join(' ');
}

讲解

  1. s.trim().replace(/\s+/g, ’ ') 先处理字符串,去除前导和尾随空格,并将多个空格替换为单个空格。
  2. let words = s.split(’ ') 分割字符串为单词数组。
  3. 然后使用指针。
  4. [words[left], words[right]] = [words[right], words[left]] 这一步 使用解构赋值的方式交换 words[left] 和 words[right] 的值,然后移动指针
  5. 然后将数组转成字符

网上思路

var reverseWords = function (s) {s = s.trim().replace(/\s+/g, ' ');let result = '';let word = '';for (let i = 0; i < s.length; i++) {if (s[i] !== ' ') {word += s[i];} else {if (word) {result = word + (result ? ' ' + result : result);word = '';}}}if (word) {result = word + (result ? ' ' + result : result);}return result;
}

讲解

  1. 和我的第一步操作一样,但是网上的判断条件很多,这里还是改成用正则
  2. 循环判断,if (s[i] !== ’ ') {word += s[i]} 这里判断当前字符是否是空格,不是就添加到 word
  3. if (word) { result = word + (result ? ’ ’ + result : result);word = ‘’} 这里在处理空格:
  • 如果是空格,并且 word 变量不为空,说明一个单词结束
  • 将这个单词添加到 result 中
  • 处理完后,重置 word 变量为空,以准备下一个单词
  1. if (word) { result = word + (result ? ’ ’ + result : result) } 在循环结束后,如果 word 变量中还有未添加的单词(即字符串的最后一个单词),将其添加到 result 中。

总结

今天真是倒反天罡了,我没用循环,但是网上的思路用了循环,看来这么几天的训练还是很有用的。

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • FLUX 1 将像 Stable Diffusion 一样完整支持ControlNet组件
  • 文本分析之关键词提取(TF-IDF算法)
  • 数据库sqlite3
  • 4.4 bps 拯救小哈
  • flannel,etcd,docker
  • LeetCode 热题100-39 对称二叉树
  • uniapp vue3安装 uview-plus3+
  • 更高效、更灵活的策略回测新体验?这份白皮书请收好!
  • kali
  • [SimCLR v2] Big Self-Supervised Models are Strong Semi-Supervised Learners
  • 【C语言】结构体新的理解
  • Day05-Unity Time类
  • element el-popover组件 查看示例图片功能实现
  • 【记录】基于Windows系统安装rust环境的过程
  • [报错] nvcc -V 找不到
  • echarts的各种常用效果展示
  • eclipse的离线汉化
  • ES6简单总结(搭配简单的讲解和小案例)
  • JavaScript 事件——“事件类型”中“HTML5事件”的注意要点
  • learning koa2.x
  • leetcode-27. Remove Element
  • MYSQL如何对数据进行自动化升级--以如果某数据表存在并且某字段不存在时则执行更新操作为例...
  • puppeteer stop redirect 的正确姿势及 net::ERR_FAILED 的解决
  • SAP云平台运行环境Cloud Foundry和Neo的区别
  • Selenium实战教程系列(二)---元素定位
  • vue+element后台管理系统,从后端获取路由表,并正常渲染
  • 编写符合Python风格的对象
  • 分享几个不错的工具
  • 高性能JavaScript阅读简记(三)
  • 腾讯视频格式如何转换成mp4 将下载的qlv文件转换成mp4的方法
  • 通信类
  • 追踪解析 FutureTask 源码
  • Mac 上flink的安装与启动
  • 积累各种好的链接
  • 扩展资源服务器解决oauth2 性能瓶颈
  • ​【C语言】长篇详解,字符系列篇3-----strstr,strtok,strerror字符串函数的使用【图文详解​】
  • ​业务双活的数据切换思路设计(下)
  • # Redis 入门到精通(九)-- 主从复制(1)
  • #1015 : KMP算法
  • #C++ 智能指针 std::unique_ptr 、std::shared_ptr 和 std::weak_ptr
  • #如何使用 Qt 5.6 在 Android 上启用 NFC
  • (3)选择元素——(17)练习(Exercises)
  • (6) 深入探索Python-Pandas库的核心数据结构:DataFrame全面解析
  • (二)【Jmeter】专栏实战项目靶场drupal部署
  • (附源码)springboot课程在线考试系统 毕业设计 655127
  • (附源码)ssm学生管理系统 毕业设计 141543
  • (附源码)基于ssm的模具配件账单管理系统 毕业设计 081848
  • (附源码)小程序儿童艺术培训机构教育管理小程序 毕业设计 201740
  • (剑指Offer)面试题41:和为s的连续正数序列
  • (牛客腾讯思维编程题)编码编码分组打印下标(java 版本+ C版本)
  • (十七)Flink 容错机制
  • (四)Android布局类型(线性布局LinearLayout)
  • (算法)求1到1亿间的质数或素数
  • (五)Python 垃圾回收机制
  • (学习总结16)C++模版2