替换空格
1.题目描述
请实现一个函数,将一个字符串中的每个空格替换成“%20”。例如,当字符串为We Are Happy.则经过替换之后的字符串为We%20Are%20Happy。
2.思路
1.先遍历一遍字符串统计出字符串的空格和字符串的长度,然后计算出替换之后的字符串长度为:new_len = str_len + space_num*2。
2.从字符串的后面开始复制和替换,首先准备两个指针p1和p2,p1指向原始字符串的末尾,p2指向替换之后的字符串的末尾。接下来向前移动p1,逐个把它指向的字符复制到p2指向的位置,直到遇到空格,把p1向前移动1格,在p2之前插入“%20”,同时p2向前移动三格。
3.代码
class Solution {
public:
void replaceSpace(char *str,int length) {
if(str == NULL || length<= 0){
return;
}
int str_len = 0;
int space_num = 0;
//统计字符串的空格
int i = 0;
while(str[i] != '\0'){
++str_len;
if(str[i] == ' '){
space_num++;
}
i++;
}
int new_len = str_len + space_num*2;
int p1 = str_len;
int p2 = new_len;
if(new_len > length){
return;
}
while(p1 >= 0 && p1 < p2){
if(str[p1] == ' '){
str[p2--] = '0';
str[p2--] = '2';
str[p2--] = '%';
}
else{
str[p2--] = str[p1];
}
p1--;
}
}
};
复杂度分析
时间复杂度:O(n)
空间复杂度:O(1)