在字串處理中,回文指正向與反向讀取結果相同的序列(如 ISABTCTBASI);鏡像字串則是指字元經過鏡像映射後,序列呈現左右對稱(如 ESTAT23)。本文透過一個經典的 C++ 程式範例,示範如何同時判斷字串是否為回文、鏡像字串、鏡像回文,或兩者皆非。
程式定義了一個鏡像對照表 rev,涵蓋大寫字母 A-Z 與數字 0-9 的鏡像字元(無對應者以空格佔位)。主流程讀取輸入字串,分別呼叫 isPalindromes() 與 isMirror() 判斷兩項特性,最後根據旗標輸出四種結果之一:
bool isPalindromes(char s[]) {
long len = strlen(s);
for (int i = 0; i < len / 2; i++) {
if (s[i] != s[len - 1 - i]) return false;
}
return true;
}
char r(char ch) { // 取得鏡像字元
if (isalpha(ch)) return rev[ch - 'A'];
return rev[ch - '0' + 25];
}
bool isMirror(char s[]) {
long len = strlen(s);
for (int i = 0; i < len / 2; i++) {
if (r(s[i]) != s[len - i - 1]) return false;
}
return true;
}
main() 以 scanf 迴圈讀取字串,若同時通過回文與鏡像檢查,則為「鏡像回文」;若僅通過其中一項,則歸類為對應類別。此演算法時間複雜度為 O(n),空間複雜度 O(1),適合線上判題與嵌入式系統應用。
此類判斷常見於密碼學驗證、資料完整性檢查、基因序列分析等領域。理解鏡像映射表的建立與雙指針遍歷技巧,有助於解決更複雜的字串對稱性問題。