程序员面试金典——面试题01.03.URL化

一、题目介绍

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

示例1:

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

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

字符串长度在[0, 500000]范围内。

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/string-to-url-lcci
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

二、解题思路

检测字符串中空格,并将其替换为%20。本题如果用string来完成,随着字符串的长度不断增加,当其超过string对象默认的空间大小时,就会发生存储空间的再分配和复制这样的带来的开销比较大。因此采用申请额外内存的方式,事先动态申请固定长度的内存,避免存储空间的再分配和复制的问题。

三、解题代码

方法一:
class Solution {
public:
    string replaceSpaces(string S, int length) {
        //字符串存储空间的再分配和复制开销比较大
        string str;
        for(int i = 0; i < length; ++i)
        {
            if(S[i] == ' ')
                str += "%20";
            else
                str += S[i];
        }
        return str;
    }
};

方法二:
class Solution {
public:
    string replaceSpaces(string S, int length) {
        //最大3 * length + 1
        char *arr = new char[3*length + 1];
        int j = 0;
        for(int i = 0; i < length; ++i)
        {
            if(S[i] == ' ')
            {
                arr[j++] = '%';
                arr[j++] = '2';
                arr[j++] = '0';
            }
            else
                arr[j++] = S[i];
        }
        arr[j] = '\0';
        return string(arr);
    }
};

四、解题结果

猜你喜欢

转载自blog.csdn.net/qq_39661206/article/details/105576985