Test Message

a224: 明明愛明明

內容

一看題名,你就該知道,這次跟迴文脫不了關係!
若你不確定什麼是「迴文」,請看 Google 字典的解釋:

迴文 huíwén

一種修辭方式。
通過詞語反覆迴環使用,表達二者互相依存或彼此制約的關係,
如“人人為我,我為人人”、“饒人不痴漢,痴漢不饒人”。


輸入

一筆測試資料一行,包含許許多多但總數不超過 1000 個的大小寫英文字母和標點符號。
不可思議的是,裡面不會有任何空白字元。

ababa
bbaaa
Level
aaabbbcc
abcdefg
HowAreYouToday
A_man,_a_plan,_a_canal:_Panama.

輸出

如果重新安排順序後,有辦法讓這一堆英文字母變成迴文的話,輸出「yes !」,否則輸出「no…」。
注意,大寫和小寫字母視為相同,即 A 和 a 是一樣的,並且,請忽視所有非英文字母的字元。

yes !
yes !
yes !
no…
no…
no…
yes !


解題思路

先把輸入的字串轉成全大寫,之後遍歷整個字串並記錄所有英文的出現次數,如果出現次數為奇數次的英文超過 1 個,代表不能產生迴文,反之則可以。


完整程式碼

AC (1ms, 60KB)
#include <stdio.h>

char input[1100];

void strupr(char *src)
{
src--;
while (*++src)
{
if (*src >= 'a' && *src <= 'z')
*src -= 32;
}
}

int main()
{
while (scanf(" %s", input) == 1)
{
char count[256] = { 0 }, isPal = 2;
strupr(input);
for (int i = 0; input[i]; i++)
count[input[i]]++;
for (int i = 'A'; i <= 'Z'; i++)
{
if (count[i] & 1)
{
isPal--;
if (isPal == 0)
break;
}
}
puts(isPal ? "yes !" : "no...");
}
return 0;
}