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