一題一算法2018-02-02(替換空格)

題目很簡單,但是真正做起來,還是遇到一些問題。
那我們接下來看一下:

題目: 替換空格

題目描述:

請實現(xiàn)一個函數(shù),將一個字符串中的空格替換成“%20”。  
例如,當字符串為We Are Happy.則經(jīng)過替換之后的字符串為We%20Are%20Happy。

思路分析:

首先我們看到這個問題想到的是so easy,我們于是腦洞大開,這還不簡單,再創(chuàng)建一個字符串,挨個復制進去遇到空格的時候我們將空格替換,這應該是絕大多數(shù)人的思路,這個思路操作起來也不難,但是有些地方需要注意,我們在創(chuàng)建被被復制字符串數(shù)組的時候需要先設定被復制的數(shù)組的大小,復制過程中按位復制等問題,但是還存在的問題是,但是還存在的問題是,假如不讓我們創(chuàng)建復制的字符串的時候,我們需要怎么操作。


進階想法:

我們想到在源數(shù)組上操作,那么我們需要進行的就是從頭開始查找空格,找到之后將數(shù)組中空格之后的數(shù)據(jù)全部向后推移2位,n個字符串的數(shù)組,對于每個空格,我們需要移動后面o(n)個字符,所以對于含有o(n)個空格字符串的字符串的時間復雜度就是O(n^2).

最終想法:

我們在不創(chuàng)建新字符數(shù)組的時候怎么樣實現(xiàn)呢,我們在源字符數(shù)組上面進行操作,我們需要進行下面幾步:


1、分別得到源字符數(shù)組的長度、空格的個數(shù)
2、源字符數(shù)組最終會變成的長度= 源字符數(shù)組的長度+空格的個數(shù)*2(因為一個空格變成了三個字符長度)
3、開始替換從后往前查找,按照字符從后往前寫,我們定義兩個指針,分別指向新和舊兩個字符數(shù)組的最后面,然后碰到空格就改變


image.png

代碼實現(xiàn):

class Solution {
public:
    void replaceSpace(char *str,int length) {
        int blankNum = 0;
        int strLength = 0;
        int i = 0;
        while(str[i] != '\0'){
            strLength ++;
            if(str[i] == ' '){
                blankNum ++;
            }
            i++;
        }
        int desStrLength = strLength + blankNum*2;
        if(desStrLength > length)
            return;
        //從后往前替換
        //源字符串最后的位置
        int indexStr = strLength;
        //目的字符串最后的位置
        int indexDes = desStrLength;
        while(indexStr >= 0 && indexDes > indexStr){
            if(str[indexStr] == ' '){
                str[indexDes--] = '0';
                str[indexDes--] = '2';
                str[indexDes--] = '%';
            }else{
                str[indexDes--] = str[indexStr];
            }
            indexStr--;
        }
        
    }
};

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容