伍佰目录 短网址
  当前位置:海洋目录网 » 站长资讯 » 站长资讯 » 文章详细 订阅RssFeed

《剑指offer》04:替换空格

来源:本站原创 浏览:51次 时间:2023-07-22
❝你自己的代码如果超过6个月不看,再看的时候也一样像是别人写的。—— 小浩❞
替换空格
题目描述

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

原题展示

解法

解法一
创建 StringBuilder,遍历原字符串,遇到非空格,直接 append 到 StringBuilder 中,遇到空格则将 %20 append 到 StringBuilder 中。

public class Solution {    /**     * 将字符串中的所有空格替换为%20     * @param str 字符串     * @return 替换后的字符串     */    public String replaceSpace(StringBuffer str) {        if (str == null || str.length() == 0) {            return str.toString();        }        StringBuilder sb = new StringBuilder();        int len = str.length();        for (int i = 0; i < len; ++i) {            char ch = str.charAt(i);            sb.append(ch == ' ' ? "%20" : ch);        }        return sb.toString();    }}

解法二【推荐】
先遍历原字符串,遇到空格,则在原字符串末尾 append 任意两个字符,如两个空格。

用指针 p 指向原字符串末尾,q 指向现字符串末尾,p, q 从后往前遍历,当 p 遇到空格,q 位置依次要 append '02%',若不是空格,直接 append p 指向的字符。

❝思路扩展:在合并两个数组(包括字符串)时,如果从前往后复制每个数字(或字符)需要重复移动数字(或字符)多次,那么我们可以考虑从后往前复制,这样就能减少移动的次数,从而提高效率。❞
public class Solution {    /**     * 将字符串中的所有空格替换为%20     * @param str 字符串     * @return 替换后的字符串     */    public String replaceSpace(StringBuffer str) {        if (str == null || str.length() == 0) {            return str.toString();        }        int len = str.length();        for (int i = 0; i < len; ++i) {            if (str.charAt(i) == ' ') {                // append 两个空格                str.append("  ");            }        }        // p 指向原字符串末尾        int p = len - 1;        // q 指向现字符串末尾        int q = str.length() - 1;        while (p >= 0) {            char ch = str.charAt(p--);            if (ch == ' ') {                str.setCharAt(q--, '0');                str.setCharAt(q--, '2');                str.setCharAt(q--, '%');            } else {                str.setCharAt(q--, ch);            }        }        return str.toString();    }}
测试用例
  1. 输入的字符串包含空格(空格位于字符串的最前面/最后面/中间;字符串有多个连续的空格);
  2. 输入的字符串中没有空格;
  3. 特殊输入测试(字符串是一个空指针;字符串是一个空字符串;字符串只有一个空格字符;字符串中有多个连续空格)。本题考点

我把我写的所有题解整理成了一本电子书放在了 github 上,三天内冲击到 github 排行榜榜首!近 5w 人下载阅读!要获取的话,直接进入下方链接就可以了(记得给我点个 star):

https://github.com/geekxh/hello-algorithm

  推荐站点

  • At-lib分类目录At-lib分类目录

    At-lib网站分类目录汇集全国所有高质量网站,是中国权威的中文网站分类目录,给站长提供免费网址目录提交收录和推荐最新最全的优秀网站大全是名站导航之家

    www.at-lib.cn
  • 中国链接目录中国链接目录

    中国链接目录简称链接目录,是收录优秀网站和淘宝网店的网站分类目录,为您提供优质的网址导航服务,也是网店进行收录推广,站长免费推广网站、加快百度收录、增加友情链接和网站外链的平台。

    www.cnlink.org
  • 35目录网35目录网

    35目录免费收录各类优秀网站,全力打造互动式网站目录,提供网站分类目录检索,关键字搜索功能。欢迎您向35目录推荐、提交优秀网站。

    www.35mulu.com
  • 就要爱网站目录就要爱网站目录

    就要爱网站目录,按主题和类别列出网站。所有提交的网站都经过人工审查,确保质量和无垃圾邮件的结果。

    www.912219.com
  • 伍佰目录伍佰目录

    伍佰网站目录免费收录各类优秀网站,全力打造互动式网站目录,提供网站分类目录检索,关键字搜索功能。欢迎您向伍佰目录推荐、提交优秀网站。

    www.wbwb.net