剑指 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),性能优秀。

    缺点:

    • 适用于大多数情况,但在特殊脚本中可能存在一定的限制。

    方法选择建议:

    方法二更适合普通场景,简洁且高效。如果需要处理特殊字符或有其他复杂需求,可以考虑方法一。

    上一篇:剑指 Offer 06. 从尾到头打印链表
    下一篇:剑指 Offer 04. 二维数组中的查找

    发表评论

    最新留言

    路过按个爪印,很不错,赞一个!
    [***.219.124.196]2025年04月17日 04时28分49秒

    关于作者

        喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
    -- 愿君每日到此一游!

    推荐文章