请实现一个函数,把字符串 s 中的每个空格替换成"%20"。
示例 1:
输入:s = “We are happy.”
输出:“We%20are%20happy.”
解法一:辅助数组
先计算出字符串中空格的个数,然后开辟足够的空间将原来的字符串拷贝进去,如果碰到空格就替换为“%20”。
如果面试官要求不能修改原字符串的话,就可以利用辅助空间解决,若没有这样的要求,那么辅助空间就会浪费一个O(n)的空间。
char * ReplaceBlank(char *s)
{
int count=0;
int len=strlen(s);//计算字符串的长度
for(int i=0;i<len;i++)
{
if(s[i] == ' ')
{
count++;//计算字符串中空格的个数
}
}
char *str=(char *)malloc(sizeof(char)*(len+1+3*count));//开辟动态内存
int j=0;//存放str的下标
for(int i=0;i<len;i++)
{
if(s[i]!=' ')//不是空格
{
str[j++]=s[i];//将s中的元素赋值到str中
}
else//否则将%20按顺序存放到str中
{
str[j++]='%';
str[j++]='2';
str[j++]='0';
}
}
str[j]='\0';
return str;
}
解法二:如过能修改原字符串,我们可以对原字符串进行空间扩充。
string replaceSpace(string s)
{
int count = 0;
int oldsize = s.size();
for (int i = 0; i < s.size(); i++)
{
if (s[i] == ' ')
{
count++;
}
}
if (count == 0)
{
return s;
}
s.resize(s.size() + 1 + count * 2);
int newsize = s.size();
int i = newsize - 1;
int j = oldsize - 1;
s[i--] = '\0';
while (i >= j && i >= 0 && j >= 0)
{
if (s[j] == ' ')
{
s[i--] = '0';
s[i--] = '2';
s[i--] = '%';
j--;
}
else
{
s[i--] = s[j--];
}
}
return s;
}