读书笔记-剑指offer面试题4

来源:互联网 发布:淘宝的心怎么快速升级 编辑:程序博客网 时间:2024/05/16 06:05

剑指offer面试题4:一个字符串中的空格 替换为%20

 

一般解法:如果一个一个的遍历,碰到空格就把它换为%20,那么后面的所有元素都要移动两个位的距离,时间复杂度O(N2)

 

O(n) 解法:遍历一遍字符串,得出空格的个数,这样 就得到替换后的新的字符串长度NewLength。那么首先我们准备两个指针,第一个p1指向字符串的末尾,另一个p2指向被替换后的字符串的末尾,这样p1,p2同时向前移动,如果p1指向的值不为空格,则直接复制到p2所指向的位置,如果碰见空格,则把空格替换为%20,然后复制的p2所指的位置,然后p2向前多一动两步。

 

//字符串空格替换为%20void ReplaceString(char *str,int length){    //判断字符串是否为空,或长度小于0    if(NULL==str||length<=0)return;    else{    int originalLength=0;//实际长度int NewLength=0;//替换后的长度int i=0,j=0;while(str[i]!='\0'){    ++originalLength;    if(str[i]==' ')++j;    ++i;}NewLength=originalLength+j*2;while(originalLength>0||NewLength>originalLength){    if(str[originalLength]==' '){    str[NewLength--]='0';str[NewLength--]='2';str[NewLength--]='%';    }    else{    str[NewLength--]=str[originalLength];    }    --originalLength;}    }}