题目描述
请实现一个函数,将一个字符串中的空格替换成“%20”。例如,当字符串为We Are Happy.则经过替换之后的字符串为We%20Are%20Happy。
解题分析
替换字符串中的空格,一、我们可以重头开始往后遍历,遇到空格就用%20替换,考虑到这样的话需要移动的元素很多,每替换一个空格,他后面的所有元素都要移动,时间复杂度太高。二、从后往前替换空格,那么只需要移动空格后面的字符串就行了,这样大大减少时间复杂度。
//length为牛客系统规定字符串输出的最大长度,固定为一个常数
class Solution {
public:
void replaceSpace(char *str,int length) {
//spaceLength记录空格的个数
int spaceLength=0;
//OldLength记录字符串长度
int OldLength=0;
//开始遍历计数
int k=0;
while(str[k]!='\0'){
OldLength++;
if(str[k]==' '){
spaceLength++;
}
k++;
}
//替换后的字符串长度
int newLength=OldLength+spaceLength*2;
//与牛客系统给的长度值比较
if(newLength>length){return;}
//从后面开始替换
while(OldLength>=0&&newLength>OldLength){
if(str[OldLength]==' '){
str[newLength--]='0';
str[newLength--]='2';
str[newLength--]='%';
}
else{
str[newLength--]=str[OldLength];
}
OldLength--;
}
}
};