我的做法:报错了不知哪里错了
class Solution {
public:
string replaceSpace(string s) {
int SpaceNum=0;
int i=0;
while(s[i]!='\0')
{
if(s[i]==' ')
SpaceNum++;
//空格长度
i++;
}
int SecLen=i+SpaceNum*2;
int indexSecond=SecLen,indexFir=i;
for(;indexFir>=0;indexFir--)
//对原来的s进行循环,然后再找空格
{
if(s[indexFir]!=' ')
{
s[indexSecond]=s[indexFir];
indexSecond--;
}
else
{
s[indexSecond]='0';
indexSecond--;
s[indexSecond]='2';
indexSecond--;
s[indexSecond]='%';
indexSecond--;
}
}
return s;
}
};
- 从后往前遍历数组,并且不需要开辟新的空间,而是直接在原数组上修改
class Solution {
public:
string replaceSpace(string s) {
if(s.empty()) return s;
int spaceCount = 0, i = s.size() - 1;
for(char c : s)
{
if(c == ' ') spaceCount ++;
}
// 扩容
s.resize(s.size() + spaceCount * 2);
int j = s.size() - 1;
while(i != j)
{
// 从后往前替换空格
if(s[i] != ' ')
{
s[j] = s[i];
i--;
j--;
}
else
{
i--;
s[j] = '0';
s[j-1] = '2';
s[j-2] = '%';
j -= 3;
}
}
return s;
}
};
- 字符串的修改在后面+=就可以了
class Solution {
public:
string replaceSpace(string s) {
string res;
for(auto c : s){
if(c == ' ')
res += "%20";
else
res += c;
}
return res;
}
};