题目描述
请实现一个函数,将一个字符串中的每个空格替换成“%20”。例如,当字符串为We Are Happy.则经过替换之后的字符串为We%20Are%20Happy。
解题思路
在字符串尾部填充任意字符,使得字符串的长度等于字符串替换之后的长度。因为一个空格要替换成三个字符(%20),因此当遍历到一个空格时,需要在尾部填充两个任意字符。
先遍历字符串数组,变量blankNum记录空格的数目,用oldStrLen记录原来字符串的长度,用newStrLen记录新字符串的长度。其中newStrLen=oldStrLen+blankNum*2;然后在从str的末尾依次向前遍历,遇到空格则替换为02%[倒序],否则替换为原字符c。
复杂度:O(N) + O(1)
class Solution {
public:
void replaceSpace(char *str,int length) {
int blankNum=0;
int oldStrLen;
for(oldStrLen=0;str[oldStrLen]!='\0';oldStrLen++){
if(str[oldStrLen]==' ')
blankNum++;
}
int newStrLen=oldStrLen+blankNum*2;
if(newStrLen>length) return;
str[newStrLen]='\0';
int point1=newStrLen-1,point2=oldStrLen-1;
while(point2>=0&&point1>point2){
char c=str[point2];
if(str[point2]==' '){
str[point1--]='0';
str[point1--]='2';
str[point1--]='%';
}else{
str[point1--]=c;
}
point2--;
}
}
};