面试题 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)
解三
思想:还可以用双指针