题目
请实现一个函数,将一个字符串中的每个空格替换成“%20”。例如,当字符串为We Are Happy.则经过替换之后的字符串为We%20Are%20Happy。
注意:void replaceSpace(char *str, int length),输入是一个数组,length是该数组的长度。字符串在数组中在结尾处保存‘\0’。
主要思路
- 计算字符串的长度结尾索引size(包含’\0’),同时计算其中空格的数量space。
- 计算空格替换成“%20”后字符串的结尾索引end = size + 2 * space
- 从原字符串结尾size(\0)处向前遍历。遇到字符,将size出的字符复制到end处。同时size和end自减。
- 遇到空格,end处添加"%20"三个字符,同时end自减3次,size自减。
- 重复上述两步知道遍历完数组(优化,当size和end相等的时候,说明前面已经没有空格了,此时不用复制了,直接从循环中break)
代码
class Solution {
public:
void replaceSpace(char *str, int length) {
if ( str == nullptr || length == 0 ) return;
// 计算空格数
int space = 0;
int size = 0;
while ( str[size] != '\0' ) {
if ( str[size] == ' ' ) ++space;
++size;
}
// 计算新数组的终止index
int end = size + 2 * space;
// 从后向前遍历
for ( int i = size; i >= 0; --i ) {
if ( i == end ) break;
if ( str[i] == ' ') {
str[end--] = '0';
str[end--] = '2';
str[end--] = '%';
}
else {
str[end--] = str[i];
}
}
}
};
本文介绍了一种将字符串中的空格替换为“%20”的算法实现,详细讲解了算法的主要思路与步骤,并提供了C++代码示例。适用于网页URL编码场景。

567

被折叠的 条评论
为什么被折叠?



