剑指 Offer 05. 替换空格(字符串处理)

在这里插入图片描述

思路:
(1)第一次遍历原字符串统计空格个数,以计算替换空格后字符串所占空间大小,并分配内存。
(2)第二次遍历原字符串,对新字符串进行赋值。对于非空格字符,直接拷贝;对空格进行相应替换。记得在末尾加上字符串结束标志。

在这里插入图片描述

char* replaceSpace(char* s){
    // 统计空格个数
    int countSpace = 0;
    for(int i=0; i<strlen(s); i++)
    {
        if(s[i] == ' ') countSpace++;
    }
    // 计算替换空格后字符串所占空间,然后申请内存
    int totalSize = strlen(s) + countSpace*2 + 1;
    char *str = malloc(sizeof(char)*totalSize);
    // 拷贝并替换空格
    int index = 0;
    for(int i=0; i<strlen(s); i++)
    {
        if(s[i] == ' ') 
        {
            str[index++] = '%';
            str[index++] = '2';
            str[index++] = '0';
        }
        else str[index++] = s[i];
    }
    str[index] = '\0';
    // 释放原字符串空间,避免内存泄漏
    free(s);

    return str;
}

时间复杂度 O ( n ) O(n) O(n):两次遍历
空间复杂度:
官方说是 O ( n ) O(n) O(n),可是这相当于动态扩容,不算额外空间吧?

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值