剑指Offer(2)替换空格

题目描述
请实现一个函数,将一个字符串中的每个空格替换成“%20”。例如,当字符串为We Are Happy.则经过替换之后的字符串为We%20Are%20Happy。
解题思路
字符串操作,需要将字符串的空格换为“%20”,最先想到的从头到尾来进行便利,如果遇到空格的话,就将空格处插入“%20”这个字符串,但是这样的话,需要挪动后面的字符,复杂度比较高,所以更优的方法是计算出输入字符串中有多少个空格,直接确定好最后返回的字符串的大小,然后从后往前推导,如果不是空格的话,直接把原始字符串的后面字符向后放置到最后的位置,如果是空格的话,就将“%20”输入,由于是从后向前来的,所以需要倒序输入02%,之后不断循环该过程就OK了
代码如下

class Solution {
public:
	void replaceSpace(char *str,int length) {
        if(str==NULL) return ;
        int originLength = 0;
        int numberOfBlank = 0;
        int i=0;
        while (str[i] != '\0')
        {
            ++originLength;
            if (str[i] == ' ')
                ++numberOfBlank;
            i++;
        }
        int newstrLength=originLength+numberOfBlank*2;
        if(newstrLength>length) return ;
        while(originLength>=0&&newstrLength>=0)
        {
            if(str[originLength]==' ')
            {
                str[newstrLength--]='0';
                str[newstrLength--]='2';
                str[newstrLength--]='%';
            }
            else
            {
                str[newstrLength--]=str[originLength];
            }
            originLength--;
        }
	}
};

猜你喜欢

转载自blog.csdn.net/weixin_43624053/article/details/84344947