劍指Offer -- 替換空格(C++)

題目描述

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

通過判斷空格的個(gè)數(shù)來確定轉(zhuǎn)換后的字符串長(zhǎng)度后,我們一般會(huì)想到由前往后替換空格,但是如此之來,后面的字符需要多次移動(dòng),導(dǎo)致效率低下。反過來,如果由后往前進(jìn)行替換,那么需要改變位置的字符只需要移動(dòng)一次,時(shí)間復(fù)雜度為O(n)。

class Solution {
public:
    void replaceSpace(char *str, int length) {
        int blank = 0;
        for (int i = 0; i < length; i++) {
            if (str[i] == ' ') 
                blank++;
        }
        int newLength = length + blank * 2;
        for (int i = length - 1; i >= 0; i--) {
            if (str[i] == ' ') {
                str[--newLength] = '0';
                str[--newLength] = '2';
                str[--newLength] = '%';
            } else {
                str[--newLength] = str[i];
            }
        }
    }
};

附上本地的IDE測(cè)試版:

#include <iostream>
using namespace std;
 
class Solution {
public:
    void replaceSpace(char *str, int length) {
        int blank = 0;
        for (int i = 0; i < length; i++) {
            if (str[i] == ' ') 
                blank++;
        }
        int newLength = length + blank * 2;
        for (int i = length - 1; i >= 0; i--) {
            if (str[i] == ' ') {
                str[--newLength] = '0';
                str[--newLength] = '2';
                str[--newLength] = '%';
            } else {
                str[--newLength] = str[i];
            }
        }
    }
};

int main() {
    // 前提是字符串的空間足夠大 
    // char str[1024] = "We Are Happy";
    char *str = new char[1024];
    cout << "請(qǐng)輸入字符串:" << endl;
    cin.getline(str, 1024);
    int length = 0, i = 0;
    while (str[length] != '\0')
        length++; 
    Solution s;
    s.replaceSpace(str, length);
    cout << "替換空格后的結(jié)果:" << endl;;
    while (str[i] != '\0') {
        cout << str[i];
        i++; 
    }
    return 0;
}
最后編輯于
?著作權(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)容

  • 官網(wǎng) 中文版本 好的網(wǎng)站 Content-type: text/htmlBASH Section: User ...
    不排版閱讀 4,716評(píng)論 0 5
  • 題目描述 請(qǐng)實(shí)現(xiàn)一個(gè)函數(shù),將一個(gè)字符串中的空格替換成“%20”。例如,當(dāng)字符串為We Are Happy.則經(jīng)過替...
    云胡同學(xué)閱讀 445評(píng)論 0 0
  • 字符串 記錄《劍指offer》中所有關(guān)于字符串的題目,以及LeetCode中的相似題目 相關(guān)題目列表 題目 字符串...
    wenmingxing閱讀 694評(píng)論 0 7
  • 說明: 本文中出現(xiàn)的所有算法題皆來自??途W(wǎng)-劍指Offer在線編程題,在此只是作為轉(zhuǎn)載和記錄,用于本人學(xué)習(xí)使用,不...
    秋意思寒閱讀 1,218評(píng)論 1 1
  • 定義一個(gè)類 定義一個(gè)類,使用關(guān)鍵字class聲明,后面跟類名(不使用new) 定義類的屬性 類的屬性可以使用var...
    SiberianDante閱讀 346評(píng)論 0 2

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