欢迎访问我的剑指offer(第二版)题解目录哦
对应的牛客网题目可点击替换空格。
题目描述
请实现一个函数,将一个字符串中的每个空格替换成“%20”。例如,当字符串为We Are Happy.则经过替换之后的字符串为We%20Are%20Happy。
算法设计
两次遍历。第一次遍历求出字符串中空格字符的个数,假设为space
。假设新字符串长度为newlen
,原字符串长度为length
,那么有
。
第二次遍历字符串,设置两个指针i
和j
,j
指向新字符串末尾,i
指向原字符串末尾。i
不断向前遍历,当遇到空格字符时,在j
指针处一次写入0
、2
、%
字符,j
不断递减;如果遇到的不是空格字符,直接将遇到的字符拷贝到j
指针处,j
递减。
注意点
- 注意考虑原字符串为空或者传入的指针为空的情况
- 注意在新字符串末尾添加
\0
字符
C++代码
class Solution {
public:
void replaceSpace(char *str, int length) {
if (str == nullptr or length == 0)
return;
int space = 0, newlen = 0;
for (int i = 0; i < length; ++i)
if (str[i] == ' ')
++space;
newlen = length + space * 2;
str[newlen] = '\0';
for (int i = length - 1, j = newlen - 1; i >= 0; --i)
if (str[i] == ' ') {
str[j--] = '0';
str[j--] = '2';
str[j--] = '%';
} else
str[j--] = str[i];
}
};