05.替换空格 (Easy)*
题目描述*
请实现一个函数,把字符串 s 中的每个空格替换成"%20"。
网络编程中,url 中含有特殊字符就需要转换成服务器可识别的字符,即 % 加上 ASCII 十六进制表示。
示例*
输入:s = "We are happy."
输出:"We%20are%20happy."
限制*
0 <= s.length() <= 10000
代码*
看起来好像很简单,用 replace 函数或者最基本的字符串拼接即可。
剑指 Offer 上提供了原地修改的算法:
将字符串扩展为替换后的长度,用两个指针 p1 和 p2,分别指向原字符串尾部和扩展后字符串尾部。向前遍历,如果 p1 指向空格,那么 p2 向前填充 02%(逆向),否则填充原字符,当 p1 == p2 或遍历结束时返回。
类似问题:合并两个排序的数组 A 和 B,A 末尾有足够空间容纳 A2。从后往前合并即可。
class Solution {
public:
string replaceSpace(string s) {
string res = "";
for(auto c : s) {
if(c == ' ') {
res += "%20";
}else {
res += c;
}
}
return res;
}
};
class Solution {
public:
string replaceSpace(string s) {
int len = s.length();
if(len == 0) {
return "";
}
for(int i = 0; i < len; i++) {
if(s[i] == ' ') {
s += " ";
}
}
int r = s.length() - 1, l = len - 1;
while(r > l && l >= 0) {
if(s[l] == ' ') {
s[r--] = '0';
s[r--] = '2';
s[r--] = '%';
}else {
s[r--] = s[l];
}
l--;
}
return s;
}
};
class Solution {
public:
void merge(vector<int>& A, int m, vector<int>& B, int n) {
int pa = m - 1;
int pb = n - 1;
int p = m + n -1;
while(p >= 0 && pa >= 0 && pb >= 0) {
A[p--] = (A[pa] > B[pb] ? A[pa--] : B[pb--]);
}
while(pb >= 0 && p >= 0) {
A[p--] = B[pb--];
}
}
};
最后更新: July 23, 2022