题目
请实现一个函数,把字符串中的每个空格替换成"%20"。
你可以假定输入字符串的长度最大是1000。
注意输出字符串的长度可能大于1000。
样例
输入:"We are happy."
输出:"We%20are%20happy."
方法一:
// 时间复杂度是 O(n)。
class Solution {
public:
string replaceSpaces(string &str) {
string res; //必须新定义一个res,不能在原来的str上修改
for (auto x: str)
if(x == ' ') res+="%20";
else res+=x;
return res;
}
};
方法二:
class Solution {
public:
string replaceSpaces(string &str) {
int len = 0;
for (auto c : str)
if (c == ' ')
len += 3;
else
len ++ ; //计算长度
int i = str.size() - 1, j = len - 1; //修改指针的位置
str.resize(len); //重定义str长度
while (i >= 0)
{
if (str[i] == ' ') //从后往前,当str[i] == ' ',则添加
{
str[j -- ] = '0';
str[j -- ] = '2';
str[j -- ] = '%';
}
else str[j -- ] = str[i]; //否则,简单的赋值。 str[j--] = str[i] . 把str原来的值赋值给扩建的str后面的
i -- ;
}
return str;
}
};
作者:yxc
链接:https://www.acwing.com/solution/AcWing/content/704/
来源:AcWing
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
心得
方法一: 必须新定义一个res,不能再原来的str上修改。
invalid conversion from ‘const char*’ to ‘char’ [-fpermissive]
str最终是const,长度是有限的,不能添加"%20"长度为3.
见方法二
方法二: 关键在于str进行了重新定义长度。