LeetCode-151.反转字符串中的单词 发表于 2022-10-04 | 分类于 算法 | 热度 ℃| 本文字数 6.4k | 阅读时长 ≈ 6 分钟题目详解相关链接代码随想录思路看完代码随想录之后的想法要保持最优空间复杂度,只能原地修改字符串(js中字符串是不可变数据类型,只能先转为数组,后续操作的算法思想是正确的)实现过程中遇到的困难移除多余空格时的边界条件处理代码TypeScript12345678910111213141516171819202122232425262728293031323334353637383940function reverseWords(s: string): string { const strArr = s.split('') removeExtraSpaces(strArr) const len = strArr.length // 先整体反转 reverse(strArr, 0, len - 1) // 再把每个单词反转回来 let start = 0 for (let i = 0; i <= len; i++) { if (strArr[i] === ' ' || i === len) { reverse(strArr, start, i - 1) start = i + 1 } } return strArr.join('')}/** 删除多余空格 */function removeExtraSpaces(strArr: string[]) { let slow = 0, fast = 0 while (fast < strArr.length) { // 移除开始位置和重复的空格 if (strArr[fast] === ' ' && (fast === 0 || strArr[fast - 1] === ' ')){ fast++ } else { strArr[slow++] = strArr[fast++] } } strArr.length = strArr[slow - 1] === ' ' ? slow - 1 : slow}/** 反转数组元素 */function reverse(strArr: string[], start: number, end: number) { while (start < end) { [strArr[start], strArr[end]] = [strArr[end], strArr[start]] start++ end-- }}时间复杂度:O(n)空间复杂度:O(n)收获相关文章LeetCode-剑指Offer-58-II.左旋转字符串LeetCode-剑指Offer-05.替换空格LeetCode-541.反转字符串IILeetCode-344.反转字符串LeetCode-202.快乐数LeetCode-142.环形链表IILeetCode-19.删除链表的倒数第 N 个结点LeetCode-27.移除元素LeetCode-459.重复的子字符串LeetCode-28.找出字符串中第一个匹配项的下标-------- 本文结束 感谢阅读 --------本文作者: Andy本文链接: https://andy.city/archives/9090.html 版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明出处!