leetcode-剑指 Offer 05. 替换空格
请实现一个函数,把字符串 s 中的每个空格替换成"%20"。
示例 1:
输入:s = “We are happy.”
输出:“We%20are%20happy.”
解题思路:
方法一: 遍历s,遇到空格就替换。
时间复杂度O(n), 时间复杂度O(n)
class Solution {
public:
string replaceSpace(string s) {
string ans="";
for(char x:s)
{
if(x==' ')
ans+="%20";
else
ans+=x;
}
return ans;
}
};
方法二: 在原地修改s,看可以降低空间消耗。一个空格需要替换成%20,需要增加两个字符,所以统计出空格的数量,在原有s的长度空间上增加2倍空格的数量就是替换后新的字符串长度。
时间复杂度O(n),
由于是在原s的基础上扩增的空间,所以需要常数个(2*count)额外的空间即可,时间复杂度O(1)
class Solution {
public:
string replaceSpace(string s) {
int count=0;
for(char x:s)
{
if(x==' ')
count++;
}
int n=s.size();
s.resize(n+2*count);
for(int i=n-1,j=s.size()-1;i<j;i--,j--)
{
if(s[i]!=' ') s[j]=s[i];
else
{
s[j-2]='%';
s[j-1]='2';
s[j]='0';
j-=2; //for中有j--
}
}
return s;
}
};