字串的調整II

瘋人張發表於2020-09-26
字串的調整II

題目描述

給定一個字元型別的陣列chas[],chas右半區全是空字元,左半區不含有空字元。現在想將左半區的空格字串替換成“%20”,假設chas右半區足夠大,可以滿足替換需要的空間,請完成替換函式。

輸入描述:

輸出一行,代表chas的左半區 ( 1 ≤ l e n g t h ( c h a s l e f t ) ≤ 1 0 5 ) (1 \leq length(chas_{left}) \leq 10^5 ) (1length(chasleft)105)

輸出描述:

輸出一行,代表替換後的字串。

示例1
輸入
a  b    c
輸出
a%20%20b%20%20%20%20c
備註:

時間複雜度 O ( n ) O(n) O(n),額外空間複雜度 O ( 1 ) O(1) O(1)


題解:

從前往後遍歷,統計空格數目,設為 num ,最終的字串長度為:len + num * 2。

然後從後往前遍歷,遇到非空字元,則直接複製,否則依次填充“0 2 %”。

程式碼
#include <stdio.h>

const int N = 3e5 + 10;

char s[N];

int main(void) {
    gets(s);
    int num = 0, i;
    int len = 0;
    for (i = 0; s[i]; ++i) {
        if (s[i] == ' ') ++num;
    }
    len = i + num * 2 - 1;
    s[len + 1] = 0;
    while (--i >= 0) {
        if (s[i] != ' ') s[len--] = s[i];
        else {
            s[len--] = '0';
            s[len--] = '2';
            s[len--] = '%';
        }
    }
    printf("%s\n", s);
    return 0;
}

相關文章