翻转字符串里的单词,难点不是翻转,而是正则表达式?💩💩💩

引言

大家好啊,我是前端拿破轮😁。

跟着卡哥学算法有一段时间了,通过代码随想录的学习,受益匪浅,首先向卡哥致敬🫡。

但是在学习过程中我也发现了一些问题,很多当时理解了并且AC的题目过一段时间就又忘记了,或者不能完美的写出来。根据费曼学习法 ,光有输入的知识掌握的是不够牢靠的,所以我决定按照代码随想录的顺序,输出自己的刷题总结和思考 。同时,由于以前学习过程使用的是JavaScript,而在2025年的今天,TypeScript几乎成了必备项,所以本专题内容也将使用TypeScript,来巩固自己的TypeScript语言能力。

题目信息

翻转字符串里的单词

leetcode题目链接

给你一个字符串 s ,请你反转字符串中 单词 的顺序。

单词是由非空格字符组成的字符串。s 中使用至少一个空格将字符串中的单词分隔开。

返回 单词 顺序颠倒且 单词 之间用单个空格连接的结果字符串。

注意:输入字符串 s中可能会存在前导空格、尾随空格或者单词间的多个空格。返回的结果字符串中,单词间应当仅用单个空格分隔,且不包含任何额外的空格。

题目分析

相信在之前完成过翻转字符串和翻转字符串II后,本题核心思想并没有什么难度,只需要将字符串按单词分割为数组后,翻转再返回即可。

但是本题有一个难点在于s中可能会存在前导空格、尾随空格或者单词间的多个空格 。首尾和单词间可能有1个或以上的空格。首尾的很好处理,使用trim()即可。那中间怎么办呢?如果只有一个空格,正好可以作为分割的依据将字符串分割为数组,问题是本题中是不确定的,可能有1个及以上,怎么办呢?

这就需要使用正则表达式 来进行匹配了。我们可以使用正则表达式\/s+\g来匹配字符串中的所有1个及以上的空格,再将其统一替换为1个空格即可。

这里的/s是转义字符,代表空格,+表示前面的表达式出现1次及以上,g表示全局匹配,整个字符串中所有符合条件的都会匹配。所以整个正则表达式/\s+/g会匹配到整个字符串中所有的1个以上的空格。我们再使用字符串的replace()方法,将其替换为1个空格,再按照1个空格使用split()方法进行分割,再使用数组的reverse()方法进行翻转,再使用join()方法拼接成字符串即可。

注意:在JS/TS中,**字符串是不可变的!!!**所有的字符串API都会返回一个新的字符串,而无法直接修改旧的字符串。

题解

ts 复制代码
function reverseWords(s: string): string {
    // 处理空格
    const newStr = s.trim().replace(/\s+/g, ' ');
    
    // 翻转后拼接
    return newStr.split(' ').reverse().join(' ');
};

事件复杂度: O ( N ) O(N) O(N)

空间复杂度: O ( N ) O(N) O(N)

总结

本题对于核心的交换思想并不难,使用双指针或直接使用reverse()API均可,关键在于对字符串的预处理 ,如何处理1个或多个空格。考查我们对正则表达式的掌握程度。

好了,这篇文章就到这里啦,如果对您有所帮助,欢迎点赞,收藏,分享👍👍👍。您的认可是我更新的最大动力。由于笔者水平有限,难免有疏漏不足之处,欢迎各位大佬评论区指正。

往期推荐✨✨✨

我是前端拿破轮,关注我,一起学习前端知识,我们下期见!

相关推荐
yi0115 小时前
LeetCode 219:存在重复元素 II——哈希表记录“最近一次出现的位置”
数据结构·人工智能·笔记·python·算法·leetcode·哈希表
程序员Sunday6 小时前
JavaScript 事件循环面试题,宏任务与微任务怎么执行|Sunday面试指南
开发语言·javascript·面试·校招·事件循环·程序员sunday
YangYang9YangYan6 小时前
2027 秋招|数据科学与大数据技术面试项目价值回答思路,告别纯代码描述
大数据·面试·职场和发展
邓江洲7 小时前
一道经典的 NSString 内存面试题
面试
灯澜忆梦8 小时前
【面向对象编程C++】| 基础语法
java·c++·算法
小蒋观天下8 小时前
专项方案:大场景港口AI安防、多干扰环境下的算法调优与落地实操
人工智能·深度学习·算法·安全·机器学习·计算机视觉·ai大模型
Evand J8 小时前
【电机滤波例程5】渐消因子自适应扩展卡尔曼滤波(EKF),MATLAB。PMSM负载突变下的状态估计。附下载链接
算法·matlab
H.莓飛8 小时前
【数据结构】二叉树_OJ题
linux·开发语言·数据结构·算法
好想像大佬一样能够ak所有9 小时前
Leetcode35.搜索插入位置
数据结构·算法·leetcode
aqiu1111119 小时前
【C++算法打怪专栏】LeetCode 165. 比较版本号(双指针与字符串流法)
c++·算法·leetcode