解題報告
問題描述
將輸入字串根據操作類型進行處理:
1. kk = 0:字元兩兩交換。
2. kk = 1:字元兩兩排序後放回。
3. kk = 2:字串分為兩半交替合併。
重複進行 k 次操作後,輸出最終字串。
解題思路
1. 資料結構:
使用 deque<char> 來存放字串,方便進行前後端的插入與移除操作。
2. 模擬操作:
• kk = 0:兩兩交換字元順序。
cp.push_back(ss[1]);
cp.push_back(ss[0]);
• kk = 1:兩兩排序後放入新字串。
pa.push_back(ss[0]);
pa.push_back(ss[1]);
sort(pa.begin(), pa.end());
• kk = 2:分成前半段和後半段交錯合併。
for (j = 0; j < ss.size() / 2; j++) sh.push_back(ss[j]);
3. 重複操作:
每次操作後更新字串,清空暫存結構。
4. 輸出結果:
將結果依序輸出。
範例說明
輸入:
abcdef
3
0 1 2
輸出:
bacfed
執行步驟:
1. kk = 0:abcdef -> bacfed
2. kk = 1:bacfed -> abcfde
3. kk = 2:abcfde -> afbdce
關鍵程式碼片段
if (kk == 0) {
while (!ss.empty()) {
cp.push_back(ss[1]);
cp.push_back(ss[0]);
ss.pop_front();
ss.pop_front();
}
}
上述片段實現兩兩交換。