剑指offer之替换空格

来源:互联网 发布:怎么代理淘宝网店 编辑:程序博客网 时间:2024/05/20 03:36

题目:请实现一个函数,将一个字符串中的空格替换成“%20”。例如,当字符串为We Are Happy.则经过替换之后的字符串为We%20Are%20Happy。

思路: 如果从头往后替换则空格后边的字符串需要集体后移,会大量消耗时间;因此,采用从后向前替换,则需要先求出新字符串的长度,只要求出空格个数则能求出新字符串长度。因此,先求空格个数,再求新字符串长度,然后从后向前替换。

代码:

class Solution {public:void replaceSpace(char *str,int length) {        //判断str是否为空        if(str==NULL || length<=0)            return;        //首先计算空字符的个数        int blankNum=0;         int len=0;//除了空格字符长度        for(int i=0;str[i]!='\0';i++){            len++;            if(str[i]==' ')                blankNum++;        }        //新字符串        int newLength=len+blankNum*2;        if(newLength<=len) //无空格则不更新            return;        for(int i=len,j=newLength;i>=0;i--)            {            if(str[i]!=' ')                str[j--]=str[i];            else{                str[j--]='0';                str[j--]='2';                str[j--]='%';            }        }}};


原创粉丝点击