題目連結 http://zerojudge.tw/ShowProblem?problemid=a224。
演算法:
算出不分大小寫的26各英文字母(a-z)各自出現的次數letterCnt[26]。
算出字母各自出現的次數letterCnt[26]為奇數的有幾個oddCnt 。
若oddCnt 大於1,則無法重新排列成回文。
程式碼:
#include <cmath>
#include <cstdio>
#include <cstring>
using namespace std;
int main(void){
char str[1000];
while(scanf("%s", &str) != EOF)
{
char letterCnt[26] = {0};
bool isPal = true;
int oddCnt = 0;
int len = strlen(str);
for(int i = 0; i < len; i++)
{
char c = str[i];
if(c >= 'A' && c <= 'Z')
{
letterCnt[c - 'A'] += 1;
}
else if(c >= 'a' && c <= 'z')
{
letterCnt[c - 'a'] += 1;
}
}
for(int i = 0; i < 26; i++)
{
if(letterCnt[i] % 2 == 1)
{
oddCnt++;
}
if(oddCnt >= 2)
{
isPal = false;
break;
}
//printf("%d\t", letterCnt[i]);
}
if(isPal == true)
printf("yes !\n");
else
printf("no...\n");
}
return 0;
}
沒有留言:
張貼留言