劍指offer—面試題5:字符串的替換

請(qǐng)實(shí)現(xiàn)一個(gè)函數(shù),把字符串 s 中的每個(gè)空格替換成"%20"。
示例:

輸入:s = "We are happy."
輸出:"We%20are%20happy."

如果使用Swift 的系統(tǒng)API完成這個(gè)算法,其實(shí)很簡(jiǎn)單。

    func replaceSpace(_ s: String) -> String {
        return s.replacingOccurrences(of: " ", with: "%20")
    }

但這道算法題考察目的并不自此。首先我們要知道字符串在內(nèi)存中的存儲(chǔ)是線性表的格式,在內(nèi)存是連續(xù)存放的。那么當(dāng)我們將空格替換%20時(shí),內(nèi)存存放的數(shù)據(jù)是要挪動(dòng)的。而算法所考察的就是我們?nèi)绾胃咝У呐矂?dòng)這塊內(nèi)存。

如果我們從頭開始遍歷每次碰到空格將空格替換為 %20 時(shí),需要將剩余的字符往后挪動(dòng)兩位,時(shí)間復(fù)雜度來說是 O(n^2)但如果反過來挪動(dòng),首先遍歷一次計(jì)算出總共需要挪動(dòng)的空間位置。給定兩個(gè)指針p1、p2,p1 指向原始字符串的末尾,p2指向擴(kuò)充后的字符串末尾。從后往前遍歷,p1向前移動(dòng),每次移動(dòng)字符從p1挪動(dòng)到p2.碰到空格時(shí) p1向前挪動(dòng),p2插入 %20 往前挪動(dòng)三格。以此類推,直到p1、p2指針指向同一位置。

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

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

  • 預(yù)備知識(shí): 字符串: 1.C/C++中每個(gè)字符串都以字符 '\0' 作為結(jié)尾。好處:方便找到尾部。缺點(diǎn):額外字符開...
    冰楓澈閱讀 261評(píng)論 0 0
  • 1.題目描述: 請(qǐng)實(shí)現(xiàn)一個(gè)函數(shù),把字符串中的每個(gè)空格替換成%20。例如,輸入“we are happy.”,輸出"...
    金錫圭璧閱讀 102評(píng)論 0 0
  • 請(qǐng)實(shí)現(xiàn)一個(gè)函數(shù),把字符串中的每個(gè)空格替換成"%20"。例如輸入"We are happy.",則輸出"We%20a...
    913c9536e19a閱讀 653評(píng)論 0 0
  • #mark- 01-二維數(shù)組基本概念 //問題:什么是二維數(shù)組?二維數(shù)組的格式?二維數(shù)組如何存儲(chǔ)?二維數(shù)組是如何遍...
    飛飛喵閱讀 1,343評(píng)論 0 1
  • 題目描述 請(qǐng)實(shí)現(xiàn)一個(gè)函數(shù),將一個(gè)字符串中的每個(gè)空格替換成“%20”。例如,當(dāng)字符串為We Are Happy.則經(jīng)...
    Mereder閱讀 285評(píng)論 0 0

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