5.替換空格

題目:請(qǐng)實(shí)現(xiàn)一個(gè)函數(shù)百姓,把字符串中的每個(gè)空格替換成“%20”渊额。例如,輸入“We are happy.”垒拢,則輸出“We%20are%20happy.”旬迹。

背景:網(wǎng)絡(luò)編程中,如果URL參數(shù)中含有特殊字符如空格等求类,則可能導(dǎo)致服務(wù)器無法獲得正確的參數(shù)值奔垦。需要將其轉(zhuǎn)換成服務(wù)器可以識(shí)別的字符。

  • 思路1.從頭到尾掃描字符串尸疆,遇到空格就替換成“%20”椿猎,然后把之后的字符串向后移動(dòng)兩個(gè)字節(jié)。每替換一次就要將后面的字符串移動(dòng)一次仓技,時(shí)間復(fù)雜度為O(n2)鸵贬。

  • 思路2.從后面向前替換,這樣每個(gè)字符只需要移動(dòng)一次脖捻。準(zhǔn)備兩個(gè)指針阔逼,一個(gè)指向原始字符串的末尾,另一個(gè)指向替換后字符串的末尾(也就是原始字符串長(zhǎng)度+空格數(shù)量*2的位置)地沮。

代碼如下:

void ReplaceBlank(char string[],int length)
{
    if (string == nullptr || length < 0)
    {
        return; 
    }

    int originalLength = 0; //originalLength 字符串實(shí)際長(zhǎng)度
    int numberOfBlank = 0;
    int i = 0;
    while (string[i] != '\0')
    {
        ++originalLength;
        if (string[i] == ' ' )
        {
            ++numberOfBlank;
        }
        ++i;
    }

    int newLength = originalLength + numberOfBlank * 2; //替換空格后的長(zhǎng)度
    if (newLength > length)
    {
        return;
    }
    int indexOfNew = newLength;
    int indexOfOriginal = originalLength;
    while (indexOfOriginal >= 0 && indexOfNew > indexOfOriginal)
    {
        if (string[indexOfOriginal] == ' ')
        {
            string[indexOfNew --] = '0';
            string[indexOfNew --] = '2';
            string[indexOfNew --] = '%';
        }
        else
        {
            string[indexOfNew --] = string[indexOfOriginal];
        }
        -- indexOfOriginal;
    }

}

后續(xù)補(bǔ)充嗜浮,直接開辟一個(gè)新的字符串?dāng)?shù)組羡亩。
時(shí)間復(fù)雜度為O(n),空間復(fù)雜度為O(n)危融。
方法:

class Solution {
public:
    string replaceSpaces(string &str) {
        string str1;
        for (int i = 0;i < str.size();i++)
        {
            if (str[i] == ' ')
            {
                str1 += "%20";
            }
            else
            {
                str1 += str[i];
            }
        }
        return str1;
    }
};
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末畏铆,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子吉殃,更是在濱河造成了極大的恐慌辞居,老刑警劉巖,帶你破解...
    沈念sama閱讀 219,589評(píng)論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件蛋勺,死亡現(xiàn)場(chǎng)離奇詭異瓦灶,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)抱完,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,615評(píng)論 3 396
  • 文/潘曉璐 我一進(jìn)店門贼陶,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人巧娱,你說我怎么就攤上這事碉怔。” “怎么了禁添?”我有些...
    開封第一講書人閱讀 165,933評(píng)論 0 356
  • 文/不壞的土叔 我叫張陵撮胧,是天一觀的道長(zhǎng)。 經(jīng)常有香客問我上荡,道長(zhǎng)趴樱,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,976評(píng)論 1 295
  • 正文 為了忘掉前任酪捡,我火速辦了婚禮,結(jié)果婚禮上纳账,老公的妹妹穿的比我還像新娘逛薇。我一直安慰自己,他們只是感情好疏虫,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,999評(píng)論 6 393
  • 文/花漫 我一把揭開白布永罚。 她就那樣靜靜地躺著,像睡著了一般卧秘。 火紅的嫁衣襯著肌膚如雪呢袱。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,775評(píng)論 1 307
  • 那天翅敌,我揣著相機(jī)與錄音羞福,去河邊找鬼。 笑死蚯涮,一個(gè)胖子當(dāng)著我的面吹牛治专,可吹牛的內(nèi)容都是我干的卖陵。 我是一名探鬼主播,決...
    沈念sama閱讀 40,474評(píng)論 3 420
  • 文/蒼蘭香墨 我猛地睜開眼张峰,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼泪蔫!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起喘批,我...
    開封第一講書人閱讀 39,359評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤撩荣,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后饶深,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體餐曹,經(jīng)...
    沈念sama閱讀 45,854評(píng)論 1 317
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,007評(píng)論 3 338
  • 正文 我和宋清朗相戀三年粥喜,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了凸主。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,146評(píng)論 1 351
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡额湘,死狀恐怖卿吐,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情锋华,我是刑警寧澤嗡官,帶...
    沈念sama閱讀 35,826評(píng)論 5 346
  • 正文 年R本政府宣布,位于F島的核電站毯焕,受9級(jí)特大地震影響衍腥,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜纳猫,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,484評(píng)論 3 331
  • 文/蒙蒙 一婆咸、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧芜辕,春花似錦尚骄、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,029評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至状蜗,卻和暖如春需五,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背轧坎。 一陣腳步聲響...
    開封第一講書人閱讀 33,153評(píng)論 1 272
  • 我被黑心中介騙來泰國(guó)打工宏邮, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 48,420評(píng)論 3 373
  • 正文 我出身青樓蜀铲,卻偏偏與公主長(zhǎng)得像边琉,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子记劝,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,107評(píng)論 2 356

推薦閱讀更多精彩內(nèi)容

  • 題目:請(qǐng)實(shí)現(xiàn)一個(gè)函數(shù)变姨,把字符串中的每個(gè)空格替換成“%20”。例如厌丑,輸入“We are happy.”定欧,則輸出“We...
    scott_alpha閱讀 143評(píng)論 0 0
  • 預(yù)備知識(shí): 字符串: 1.C/C++中每個(gè)字符串都以字符 '\0' 作為結(jié)尾。好處:方便找到尾部怒竿。缺點(diǎn):額外字符開...
    冰楓澈閱讀 201評(píng)論 0 0
  • 題目: 請(qǐng)實(shí)現(xiàn)一個(gè)函數(shù)砍鸠,把字符串中的每個(gè)空格替換成“%20”。例如輸入“We are happy”耕驰,則輸出”We%...
    淺淺星空閱讀 202評(píng)論 0 1
  • 題目:請(qǐng)實(shí)現(xiàn)一個(gè)函數(shù)爷辱,把字符串的每個(gè)空格替換成"%20"。例如朦肘,輸入"We are happy."饭弓,則輸出"We%...
    蛋花湯湯閱讀 131評(píng)論 0 0
  • 其實(shí),我也并不明了媒抠。 什么都似乎剛剛好弟断,什么又似乎少了點(diǎn)什么? 他問:你想要什么樣的男朋友趴生? 我搖搖頭阀趴,表示不知道...
    往日詼諧閱讀 195評(píng)論 0 2