04_ReplaceBlank替换空格

题目:请实现一个函数,把字符串中的每个空格替换成”%20”。例如输入为“We are happy.”,则输出为“We%20are%20happy.”。

思路:

空格是1个字符,%20是3个字符,直接替换,字符串会变长。
《》如果要是在原来的字符串上做替换,那么就有可能会覆盖修改在该字符串后面的内存。
《》如果是创建新的字符串并在新的字符串上做替换,那么可以分配足够的内存。
!!!所以要问清楚!!!

1.从前往后替换:
时间复杂度为O(n^2)
每遇到一个空格,后面的字符都需要往后移动两个字节

2.从后往前替换:
先遍历一遍字符串,统计字符串总长度和空格的数量,这样可以算出替换后所需要的字符串总长度。
这里写图片描述
这里写图片描述

//length为牛客系统规定字符串输出的最大长度,固定为一个常数
class Solution {
public:
    void replaceSpace(char *str,int length) {
        if(str==NULL || length<=0)//先判断字符串是否为NULL指针或空字符串
            return;

        //oriLength统计原来字符串的长度,空格数量
        int oriLength=0;
        int numOfSpace=0;
        int i=0;
        while(str[i]!='\0'){
            ++oriLength;
            if(str[i]==' ')
                ++numOfSpace;

            ++i;
        }

        //newLength替换后的字符串长度
        int newLength=oriLength+2*numOfSpace;

        if(newLength>length)
            return;

        int indexOfOri=oriLength;
        int indexOfNew=newLength;

        while(indexOfOri>=0 && indexOfNew>indexOfOri){
            if(str[indexOfOri]==' '){
                str[indexOfNew--]='0';
                str[indexOfNew--]='2';
                str[indexOfNew--]='%';
            }
            else
                str[indexOfNew--]=str[indexOfOri];
            --indexOfOri;
        }
    }
};
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值