1、时间复杂度为o(n)
class Solution {
public:
void replaceSpace(char *str,int length)
{
if(str==NULL&&length<0)return;
int originallen=0;
int numberblank=0;
int i=0;
while(str[i]!='\0')
{++originallen;
if(str[i]==' ')
++numberblank;
++i;
}
int newlen=originallen+numberblank*2;
if(newlen>length)return;
int indexorignal=originallen;
int indexnew=newlen;
while(indexorignal>=0&&indexnew>indexorignal)
{
if(str[indexorignal]==' ')
{
str[indexnew--]='0';
str[indexnew--]='2';
str[indexnew--]='%';
}
else
{
str[indexnew--]=str[indexorignal];
}
indexorignal--;
}
}
};
//1、首先遍历一遍数组,计算出数组的长度;统计出空格的个数;计算出新的数组长度;
2、设置两个指针,一个指向原数组长度的末尾p1,一个指向新的数组长度的末尾p2;
3、接下来移动p1, 逐个的把P1指向的数组元素复制到P2所指的位置,知道遇到第一个空格,时,P1向前移动一步,在P2前面加上%20;P2向前移动3个位置;紧接着遇到第二个空格,处理和之前一样,直到P1和P2指向同一个位置,表明所有的空格替换完毕。
二、从前往后遍历的话时间复杂度是O(N^2)