1. 程式人生 > >劍指Offer(2)替換空格

劍指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--;
        }
	}
};