剑指 Offer - 02 - 替换空格

发布于 2024-05-09 08:32:53 字数 1537 浏览 12 评论 0

题目

请实现一个函数,将一个字符串中的每个空格替换成 %20 。例如,当字符串为 We Are Happy. 则经过替换之后的字符串为 We%20Are%20Happy.

解析

思路

  • 这个题目如果只是简单的插入的话,插入之后导致后面的元素的移动导致,需要 O(n2) 的复杂度;
  • 这个的解决方法使用两个指针,可以达到 O(n) 复杂度;
  • 首先计算出空格的个数,这样求的新的字符串的长度
  • 然后使用两个指针,新的指针 second 指向新的字符串的末尾,老指针 first 指向原来字符串的末尾,每次检查字符串的末尾如果是空格的话,就添加 %20 进去,否则把原来的字符串复制到后面;

如下图:

代码:

public class Solution {
    public String replaceSpace(StringBuffer str) {
        int spaceNum = 0; //计算空格数量
        for (int i = 0; i < str.length(); i++)
            if (str.charAt(i) == ' ')
                spaceNum++; 
        int fi = str.length() - 1; //第一个指针 
        int se = str.length() + 2 * spaceNum - 1; //第二个指针的位置
        str.setLength(se + 1); //新的长度 = oldLen + 2 * spaceNum
        while (fi >= 0) {
            if (str.charAt(fi) == ' ') {
                str.setCharAt(se--, '0');
                str.setCharAt(se--, '2');
                str.setCharAt(se--, '%');
            } else {
                str.setCharAt(se--, str.charAt(fi));
            }
            fi--;
        }
        return str.toString();
    }
}

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据

关于作者

我不会写诗

暂无简介

0 文章
0 评论
22 人气
更多

推荐作者

内心激荡

文章 0 评论 0

JSmiles

文章 0 评论 0

左秋

文章 0 评论 0

迪街小绵羊

文章 0 评论 0

瞳孔里扚悲伤

文章 0 评论 0

    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文