原题连接:https://www.acwing.com/problem/content/description/17/
class Solution {
public:
string replaceSpaces(string &str) {
// 最暴力的做法,时间快。
// string res;
// int len = str.length();
// int j = 0;
// for(int i = 0; i < len; i ++)
// {
// if(str[i] == ' ')
// {
// res += "%20";
// }
// else
// res += str[i];
// }
// return res;
// 使用双指针,节省空间,但是费时间
// 参考y总的题解:https://www.acwing.com/solution/content/704/
int len0 = str.length();
int len = 0;
for(int i = 0; i < str.length(); i ++)
if(str[i] == ' ')
len += 3;
else len ++;
str.resize(len);
// 这个是先进循环,执行一次之后才判断,所以会SG
// for(int j = len - 1, i = len0 - 1; i; i --)
// {
// if(str[i] == ' ')
// {
// str[j --] = '0';
// str[j --] = '2';
// str[j --] = '%';
// }
// else
// str[j --] = str[i];
// }
// 这个是先判断,所以j不会越界。
int i = len0 - 1, j = len - 1;
while (i >= 0)
{
if (str[i] == ' ')
{
str[j -- ] = '0';
str[j -- ] = '2';
str[j -- ] = '%';
}
else str[j -- ] = str[i];
i -- ;
}
return str;
}
};