
剑指 Offer 05. 替换空格
将字符串转换为字符数组。 遍历字符数组,统计空格的数量。 根据空格数量增加字符串的长度(每空格替换为 从末尾向前遍历,逐个字符填充到新长度的字符串中: 使用字符串的替换方法,直接替换所有空格为
发布日期:2021-05-12 21:18:18
浏览次数:19
分类:精选文章
本文共 1150 字,大约阅读时间需要 3 分钟。
剑指 Offer 05. 替换空格
问题描述:
实现一个函数,将字符串 s
中的每个空格替换成 %20
。
思考与解法:
在解决这个问题时,可以采用两种不同的方法。下面将详细分析每种方法的实现过程及优缺点。
方法一:
步骤如下:
%20
,长度增加2)。- 如果是空格,插入
%20
,然后跳过下一个位置。 - 如果不是空格,直接填充到当前位置。
示例代码:
let replaceSpace = function (s) { // 方法一 let strArr = s.split(''); let spaceCounter = 0; for (let i of strArr) { if (i === ' ') spaceCounter++; } // 增加字符串长度以容纳替换后的空格 strArr.length += spaceCounter * 2; // 从后往前替换 for (let i = strArr.length - 1; i >= 0; i--) { if (strArr[i] !== ' ') { strArr[i] = strArr[i]; } else { strArr[i - 2] = '%'; strArr[i - 1] = '2'; strArr[i] = '0'; // 跳过插入的字符 i--; } } return strArr.join('');};
优点:
- 适合复杂情况,能够处理大量数据。
- 控制内存,避免了额外的内存分配。
缺点:
- 代价较高,时间复杂度较高。
- 需要逆向遍历,逻辑稍显复杂。
方法二:
步骤如下:
%20
。示例代码:
let replaceSpace = function (s) { // 方法二:使用简单的替换方法 return s.replaceAll(' ', '%20');};
优点:
- 简单易行,操作高效。
- 内存占用低,时间复杂度为
O(n)
,性能优秀。
缺点:
- 适用于大多数情况,但在特殊脚本中可能存在一定的限制。
方法选择建议:
方法二更适合普通场景,简洁且高效。如果需要处理特殊字符或有其他复杂需求,可以考虑方法一。
发表评论
最新留言
路过按个爪印,很不错,赞一个!
[***.219.124.196]2025年04月17日 04时28分49秒