日期: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;
}
沒有留言:
張貼留言