小雪之前看過一個研究,研究內容指出:「英文字母的組合,不影響閱讀順序。」,於是小雪決定來驗證這個研究的真實性。小雪會提供翻轉前的字串以及翻轉軸,翻轉前之字串會依照翻轉軸進行左右置換並顛倒順序。
舉例而言,若小雪提供字串 foreign 並以 re 為翻轉軸,則 re 不動,re 左右兩側的「fo」與「ign」交換位置,得到「ignrefo」,接著將「fo」、「ign」各自顛倒順序,便能得到翻轉後之字串「ngireof」。
請你撰寫一個程式,給定翻轉前字串以及翻轉軸,幫助小雪找出翻轉後之字串。
範例輸入 | 範例輸出 |
---|---|
第一行會輸入一串文字,代表的是翻轉前字串 S,且此字串最長長度不超過 50 個字元。 第二行會輸入一串文字,代表的是翻轉軸字串 T,S 字串必定包含 T 字串。若 S 字串在 T 字串中出現不只一次,以最左邊第一次出現為翻轉軸 (請參見範例 2)。 註:輸入皆為小寫英文字母 | 依照翻轉規則,輸出翻轉後的字串於一行。 |
apple ppl | eppla |
banana na | annaab |
split t | tilps |
what wh | tawh |
complex ex | exlpmoc |
overcome overcome | overcome |
解題思路
先找到翻轉軸的位置,然後將字串切成三等份,分別為翻轉軸前、翻轉軸、和翻轉軸後。將前後字串進行翻轉並將順序對調,會變成「翻轉軸後 –> 翻轉軸 –> 翻轉軸前」。
範例程式碼-ZeroJudge F341: 閱讀順序(Reading)
#include <iostream>
#include <algorithm>
using namespace std;
int main() {
cin.sync_with_stdio(0);
cin.tie(0);
string str, mid;
cin >> str >> mid;
for (int i = 0; i<str.length(); i++) {
if (str[i] == mid[0]) {
string tmp = "";
for (int j = i; j<i+mid.length(); j++) tmp += str[j];
if (tmp == mid) {
string a = "", b = "";
for (int j = 0; j<i; j++) a += str[j];
for (int j = i+mid.length(); j<str.length(); j++) b += str[j];
reverse(a.begin(), a.end());
reverse(b.begin(), b.end());
cout << b << mid << a << "\n";
break;
}
}
}
}
//ZeroJudge F341
//Dr. SeanXD