自己实现的方法一,思路是先获取空格的个数,然后根据空格个数申请新的字符串长度。
class Solution {
public:
string replaceSpace(string s) {
int size = s.size();
int cnt = 0,loc = 0;
for(int i = 0;i < size;i++)
if(s[i] == ' ')
cnt++;
string res(size + 2*cnt,'0');
for(int i = 0;i < size;i++)
{
if(s[i] != ' ')
{
res[loc++] = s[i];
}else
{
res[loc++] = '%';
res[loc++] = '2';
res[loc++] = '0';
}
}
return res;
}
};
运行效率:
执行用时:0 ms, 在所有 C++ 提交中击败了100.00%的用户
内存消耗:6.1 MB, 在所有 C++ 提交中击败了44.91%的用户
代码改进的几个思路:
一个空格变成%20,说明字符串最大变为原来的三倍,然后最后再去substr即可。
方法二:
class Solution {
public:
string replaceSpace(string s) {
int size = s.size();
int loc = 0;
string res(size * 3 ,'0');
for(int i = 0;i < size;i++)
{
if(s[i] != ' ')
{
res[loc++] = s[i];
}else
{
res[loc++] = '%';
res[loc++] = '2';
res[loc++] = '0';
}
}
return res.substr(0,loc);
}
};
运行效率:
执行用时:0 ms, 在所有 C++ 提交中击败了100.00%的用户
内存消耗:6 MB, 在所有 C++ 提交中击败了82.38%的用户
代码上简洁了一点,但仔细想想string可以写的更简洁一点:
方法三:
class Solution {
public:
string replaceSpace(string s) {
string res;
for(auto c:s)
{
//(c == ' ') ? res += "%20": res += c;
if(c == ' ')
res += "%20";
else
res += c;
}
return res;
}
};