熱門文章

2025年6月2日 星期一

ZeroJudge 解題筆記:m801. 鏡像對稱 (Mirror)

作者:王一哲
日期:2025年6月2日



ZeroJudge 題目連結:m801. 鏡像對稱 (Mirror)

解題想法


這題除了迴文字串的條件之外,另外要求字母必須是 AHIMOTUVWXY。

Python 程式碼


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

def test(s):
    letters = "AHIMOTUVWXY"  # 合法的字元
    n = len(s)  # s 的長度
    for i in range(n//2):  # 檢查是否為迴文,是否為合法的字元
        if s[i] != s[n-i-1] or s[i] not in letters or s[n-i-1] not in letters:
            return False
    if n%2 == 1 and s[n//2] not in letters:  # 如果 n 是奇數,再檢查一次中央的字元
        return False
    return True  # 如果以上的 return 都沒有觸發,符合要求,回傳 True

for line in sys.stdin:
    print("Yes" if test(line.strip()) else "No")


C++ 程式碼


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

bool test(string s) {
    set<char> letters = {'A', 'H', 'I', 'M', 'O', 'T', 'U', 'V', 'W', 'X', 'Y'};  // 合法的字元
    int n = (int)s.size();  // s 的長度
    for(int i=0; i<n/2; i++) {  // 檢查是否為迴文,是否為合法的字元
        if (s[i] != s[n-i-1] || letters.count(s[i]) != 1 || letters.count(s[n-i-1]) != 1) {
            return false;
        }
    }
    if (n%2 == 1 && letters.count(s[n/2]) != 1) {  // 如果 n 是奇數,再檢查一次中央的字元
        return false;
    }
    return true;  // 如果以上的 return 都沒有觸發,符合要求,回傳 true
}

int main() {
    ios::sync_with_stdio(0); cin.tie(0);
    string line;
    while(cin >> line) {
        cout << (test(line) ? "Yes\n" : "No\n");
    }
    return 0;
}


沒有留言:

張貼留言