替换空格的几种解法

题目描述

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

牛客网题目连接

题目分析

字符串存在数组中,一个空格替换后需要多出2个存储位置,我们加以分析,会有以下两种情况:

case1:不在原来的字符串上替换

如果原来的字符串的存储空间非常有限,我们需要另外开辟一个足够大的数组,将原来数组里的内容复制过来,并在遇到空格时换成指定字符,这样的话需要比较多的额外空间

为避免浪费更多的存储空间,我们应先遍历字符串,以找到字符串中空格的个数,从而申请额外的存储空间(替换一个空格需要多出2个存储位置),实现代码如下:

class Solution {
public:
	void replaceSpace(char *str,int length) {
	    int i,j,count=0;
	    for(i=0;i<length;i++){
            if(str[i]==' '){
                count+=2;
            }
	    }
	    char temp[length+count+1];
	    for(i=0,j=0;i<length;i++,j++){
            if(str[i]==' '){
                temp[j]='%';
                j++;
                temp[j]='2';
                j++;
                temp[j]='0';
            }else{
                temp[j]=str[i];
            }
	    }
        for(i=0;i<length+count;i++){
            str[i]=temp[i];
	    }
	}
};
运行时间:4ms

占用内存:612k

可以看出这种解法对空间的要求比较高

case2:在原来的字符串上替换

当初始给定的字符串数组有比较多的内存空间时,有两种解法可供参考:

解法1:常规解法

遇到空格就替换,然后将后面的依次挪过去(挪2位),这样的话时间复杂度会特别大,不推荐

class Solution {
public:
	void replaceSpace(char *str,int length) {
        int i,j,count;
	    for(i=0,j=0;i<length;i++,j++){
            if(str[i]==' '){
                count=length+2;
                for(j=count;j>i+2;j--){
                    str[j]=str[j-2];
                }
                str[i]='%';
                str[++i]='2';
                str[++i]='0';
            }
	    }
    }
};
运行时间:4ms

占用内存:492k

解法2:低复杂度解法

先遍历一遍数组,计算出有多少个空格,然后我们就可以知道数组里每个元素最终的存储位置了,因为我们所要替换的值的长度是一定的

那么我们可以倒着来,直接从最后一个填,一直填到第一个就行,遇到空格按照02%的顺序替换,我们需要两个指针以完成交换,代码如下:

class Solution {
public:
	void replaceSpace(char *str,int length) {
        int i,j,count=0;
	    for(i=0;i<length;i++)if(str[i]==' ')count++;
	    for(i=length+count*2-1,j=length-1;j>=0;i--,j--){
            if(str[j]==' '){
                str[i]='0';
                str[--i]='2';
                str[--i]='%';
            }else{
                str[i]=str[j];
            }
	    }
    }
};
运行时间:3 ms	

占用内存:504K

Python简单解决

而使用Python语言就可以简单解决这个问题:

# -*- coding:utf-8 -*-
class Solution:
    # s 源字符串
    def replaceSpace(self, s):
        # write code here
        r=''
        for i in s:
            if(i==' '):
                r+='%'
                r+='2'
                r+='0'
            else:
                r+=i
        return r
运行时间: 20ms 

占用内存: 5752KB
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值