思路:
为了避免插入操作,可以考虑从后往前去替换空格。
可以通过先计算空格数目确定新数组的长度,这样设置两个指针i,j(或索引)去进行原地操作,遇空格就替换i-1,j-3,别的就直接复制,当i与j相等时停止操作
class Solution {
public:
void replaceSpace(char *str,int length) {
int old_n=0,new_n=0;
int i=0,blank=0;
while(str[i]!='\0'){
old_n++;
if(str[i]==' ')
blank++;
i++;
}
new_n=old_n+2*blank;
if(new_n>length)
return;
while(old_n>=0 && new_n>old_n){
if(str[old_n]==' '){
str[new_n--]='0';
str[new_n--]='2';
str[new_n--]='%';
}
else
str[new_n--]=str[old_n];
old_n--;
}
}
};
网友评论