熱門文章

2025年3月22日 星期六

ZeroJudge 解題筆記:g005. 倒置文章 (Inversion)

作者:王一哲
日期:2025年3月22日



ZeroJudge 題目連結:g005. 倒置文章 (Inversion)

解題想法


這題考字串處理,從頭開始依序讀取字串的內容,先暫存內容到另一個字串,如果讀到 + 或 - 再結算之前暫存的內容,儲存到最後要輸出的字串之中。

Python 程式碼


使用時間約為 18 ms,記憶體約為 3.3 MB,通過測試。
import sys

for s in sys.stdin:
    s = s.strip()  # 刪除讀到的字串結尾的 \n
    rev = False  # 是否反轉,預設為否
    a, t = "", ""  # a 儲存答案,t 儲存反轉字串
    for c in s:  # 依序由 s 讀取字元 c
        if c == '+':  # 如果 c 是 +
            a += t; t = ""  # 結算之前儲存的 t,將 t 接到 a 之後再清空 t
            rev = False  # 順向
        elif c == '-':  # 如果 c 是 -
            a += t; t = ""  # 結算之前儲存的 t,將 t 接到 a 之後再清空 t
            rev = True  # 反向
        else:  # 如果 c 是其它字元
            if rev: t = c+t  # 如果目前是反向,將 c 接到 t 之前
            else: a += c  # 如果目前是順向,將 c 接到 a 之後
    a += t  # 最後再結算一次 t
    print(a)  # 印出答案


C++ 程式碼


使用時間約為 2 ms,記憶體約為 352 kB,通過測試。
#include <iostream>
#include <string>
using namespace std;

int main() {
    ios::sync_with_stdio(0); cin.tie(0);
    string s;  // 讀到的字串
    while(cin >> s) {
        bool rev = false;  // 是否反轉,預設為否
        string a = "", t = "";  // a 儲存答案,t 儲存反轉字串
        for(char c : s) {  // 依序由 s 讀取字元 c
            if (c == '+') {  // 如果 c 是 +
                a += t; t = "";  // 結算之前儲存的 t,將 t 接到 a 之後再清空 t
                rev = false;  // 順向
            } else if (c == '-') {  // 如果 c 是 -
                a += t; t = "";  // 結算之前儲存的 t,將 t 接到 a 之後再清空 t
                rev = true;  // 反向
            } else {  // 如果 c 是其它字元
                if (rev) t = c+t;  // 如果目前是反向,將 c 接到 t 之前
                else a += c;  // 如果目前是順向,將 c 接到 a 之後
            }
        }
        a += t;  // 最後再結算一次 t
        cout << a << "\n";  // 印出答案
    }
    return 0;
}


沒有留言:

張貼留言