字符串的URL化

URL化。编写一种方法,将字符串中的空格全部替换为%20。假定该字符串尾部有足够的空间存放新增字符,并且知道字符串的“真实”长度。(注:用Java实现的话,请使用字符数组实现,以便直接在数组上操作。)

示例1:

 输入:"Mr John Smith    ", 13
 输出:"Mr%20John%20Smith"
示例2:

 输入:"               ", 5
 输出:"%20%20%20%20%20"

-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------

1. 第一种解法非常容易想到,再次初始化一个空字符串,然后遍历原来的字符串,如果遇到空格,则在其后面添加“%20”,如果没有遇到空字符,则添加当前遍历的字符;这种做法的缺点也是相当明显的,我们另外开辟了一个空间;

class Solution:
    def replaceSpaces(self, S: str, length: int) -> str:
        s = ""
        num = 0
        for strs in S:
            if strs != " " and num < length:
                s += strs
                num+= 1
            elif strs == " " and num<length:
                s += "%20"
                num+=1
        return s

2. 由于开辟空间的方式带来的弊端的是需要开辟新的空间对其进行相应计算,那么我们自然想到不开辟相关的空间计算,所以要在原来的空间上完成空格字符的“%20”插入的操作,这里的技巧是我们要从后向前进行插入(插入后的数组的长度是我们可以预先知道的),因为这样会减小空间的移动,如果从前往后进行处理, 在前面字符插入时,会带来后面字符的移动,这样显得非常麻烦,后面的问题就是我们如何计算对应相关位置;

下面是C++代码的相关实现:

class Solution {
public:
    string replaceSpaces(string S, int length) {
        if(S.empty())
            return S;
        //计算转化后的长度
        int cnt = 0;
        for(int i = 0; i<length; i++){
            if(S[i] == ' ')
                cnt++;
        }
        int newLen = length+cnt*2, j  = newLen-1;
        for(int i = length-1; i>=0 && i!=j; i--){
            if(S[i] == ' '){
                S[j--] = '0';
                S[j--] = '2';
                S[j--] = '%';
            }else{
                S[j--] = S[i];
            }
        }
        S[newLen] = '\0';
        return S;
    }
};

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值