程序員面試金典 1.4 空格替換

題目

請編寫一個方法,將字符串中的空格全部替換爲“%20”。假定該字符串有足夠的空間存放新增的字符,並且知道字符串的真實長度(小於等於1000),同時保證字符串由大小寫的英文字母組成。
給定一個string iniString 爲原始的串,以及串的長度 int len, 返回替換後的string。

我的題解

string replaceSpace(string iniString, int length) {
        // write code here
        int i = 0, count = 0, p;
        for(; i < length; ++ i)
            if(iniString[i] == ' ')
                count ++;

        p = 2 * count + length;

        char c_arr[3000];
        c_arr[p --] = '\0';

        for(i = length - 1; i >= 0; -- i) {
            if(iniString[i] != ' ') {
                c_arr[p --] = iniString[i];
            }else {
                c_arr[p --] = '0';
                c_arr[p --] = '2';
                c_arr[p --] = '%';
            }
        }

        return string(c_arr);
    }

這個題解我寫的並不滿意,因爲令我滿意的題解並不需要額外開闢數組,而是直接在原數組上進行修改,並不需要額外的空間。如下:

string replaceSpace(string iniString, int length) {
        // write code here
    int i = 0, count = 0, p;
    for(; i < length; ++ i)
        if(iniString[i] == ' ')
            count ++;

    p = 2 * count + length;

    if(iniString.size() < p)
        return "ERROR";

    iniString[p --] = '\0';

    for(i = length - 1; i >= 0; -- i) {
        if(iniString[i] != ' ') {
            iniString[p --] = iniString[i];
        }else {
            iniString[p --] = '0';
            iniString[p --] = '2';
            iniString[p --] = '%';
        }
    }

    return iniString;
}

題目中也說了,數組足夠長,這樣解才更好。但是牛客網OJ的測試用例似乎並不符合提議,所以想要通過只能重新開一個數組了。

發佈了28 篇原創文章 · 獲贊 0 · 訪問量 5735
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章