同步GitHub在此 ? https://github.com/TeFuirnever/GXL-Skill-Tree
替换空格
请实现一个函数,把字符串 s 中的每个空格替换成"%20"。
示例 1:
输入:s = "We are happy."
输出:"We%20are%20happy."
限制:
0 <= s 的长度 <= 10000
通过次数227,105提交次数297,856
最应该想到的方法是,首先新建一个字符串,然后从头遍历原字符串,如果遇到满足要求的,修改即可,如果没遇到,保留下来。
算法流程:
//面试题05.替换空格
class Solution {
public:
string replaceSpace(string s) {
string res;
for (auto x : s)
{
if (x == ' ') res += "%20";
else res += x;
}
return res;
}
};
/*
时间复杂度:O(n)。遍历字符串 s 一遍。
空间复杂度:O(n)
*/
需要注意的是,空间复杂度,由于新建一个答案字符串,所以空间复杂度不是常数。
算法流程:
//面试题05.替换空格
//标准做法
class Solution {
public:
string replaceSpace(string s) {
int oldl = s.length() - 1;
for (int i = 0; i <= oldl; i++) {
if (s[i] == ' ') {
s += "00";
}
}
int newl = s.length() - 1;
if (newl <= oldl) {
return s;
}
for (int i = oldl; i >= 0; i--) {
char c = s[i];
if (c == ' ') {
s[newl--] = '0';
s[newl--] = '2';
s[newl--] = '%';
}
else {
s[newl--] = c;
}
}
return s;
}
};
/*
时间复杂度:O(n)。遍历字符串 s 一遍。
空间复杂度:O(1)。由于是原地扩展 s 长度,因此使用 O(1)O(1) 额外空间。
*/