剑指offer 05 替换空格

这篇博客讨论了如何在Java中将字符串中的每个空格替换为"%20"。提供了两种实现方式:一种是暴力的字符串拼接方法,但效率较低;另一种是利用辅助char数组,通过预估空间避免频繁拼接,提高了效率。博客还介绍了字符串的初始化方法,即通过char数组创建新的字符串。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

问题描述

请实现一个函数,把字符串 s 中的每个空格替换成"%20"。

示例 1:

输入:s = “We are happy.”
输出:“We%20are%20happy.”

分析和实现

暴力实现

最容易想到的就是遍历并且进行字符串拼接,具体代码如下:

class Solution {
    public String replaceSpace(String s) {
        String result = "";
        int length = s.length();
        for(int i=length-1; i>=0; i--){
            char temp = s.charAt(i);
            if(temp != ' '){
                result = String.valueOf(temp) + result;
            }else{
                result = "%20" + result;
            }
        }
        return result;
    }
}

这种方式的缺点也是非常明显的,因为字符串的拼接耗时是很大的。

辅助数组

按照用空间换时间的思路,对上述的方法进行改进。

  1. 因为遇到空格之后,一个空格会变成三倍长,所以可以使用一个三倍长的 char 数组来装入改变之后的内容。
  2. 字符串的初始化方法,可以直接放入 char 数组进行初始化, 具体使用方法如下:
Char[] array = new Char[10];
// offset 是 array 的开始下标
// count 是从 array 开始数 count 个字符
String s = new String(array, offset, count);

平常字符串总是初始化为空,已经忘记这种初始化方法了,这次算是学习到了。

class Solution {
    public String replaceSpace(String s) {
        int length = s.length();
        char[] temp = new char[length * 3];
        int resultLength = 0;
        for(int i=0;i<s.length(); i++){
            if(s.charAt(i) == ' '){
                temp[resultLength++] = '%';
                temp[resultLength++] = '2';
                temp[resultLength++] = '0';
            }else{
                temp[resultLength++] = s.charAt(i);
            }
        }

        String result = new String(temp, 0, resultLength);
        return result;
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

阿德罗斯

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值