面试题 01.03. URL化【LeetCode】

面试题 01.03. URL化

题目链接

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

示例 1:输入:"Mr John Smith ", 13 输出:“Mr%20John%20Smith”

示例 2: 输入:" “, 5 输出:”%20%20%20%20%20"

限制:0 <= len(s) <= 100 s[i]仅包含小写字母 如果你不使用额外的数据结构,会很加分。

解一

思想: 定义了三个类:istringstream、ostringstream 和 stringstream,分别用来进行流的输入、输出和输入输出操作。本文以 stringstream 为主,介绍流的输入和输出操作。

主要用来进行数据类型转换,由于 使用 string 对象来代替字符数组(snprintf 方式),避免了缓冲区溢出的危险;而且,因为传入参数和目标对象的类型会被自动推导出来,所以不存在错误的格式化符号的问题。简单说,相比 C 编程语言库的数据类型转换, 更加安全、自动和直接。

class Solution {
public:
    string replaceSpaces(string S, int length) {
        stringstream ss;
        for (int i = 0; i < length; ++i)
        {
            if (S[i] != ' ')
            {
                ss << S[i];
            }
            else
            {
                ss << "%20";
            }
        }
        return ss.str();
    }
};
复杂度
  • 时间复杂度:

时间复杂度: O ( n ) O(n) O(n)

  • 空间复杂度:

空间复杂度: O ( 1 ) O(1) O(1)


解二

思想:遍历,若空格则加上"%20",否则加上Si

class Solution {
public:
    string replaceSpaces(string S, int length) {
        string ans = "";
        for(int i = 0; i < length; i++) {
            if(S[i] == ' ') {
                ans += "%20";
            } else {
                ans += S[i];
            }
        }
        return ans;
    }
};
复杂度
  • 时间复杂度:

时间复杂度: 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、付费专栏及课程。

余额充值