Problem Description
從前,有一個字符串,它超級羨慕迴文串的美麗, 於是他拼盡全力想把自己變成迴文串的模樣.
但是,現實總是殘酷的,有些字符串無論如何也變不成迴文串
現在請問:該字符串能否通過重新排列來構成迴文串?如果能,輸出 YES,否則輸出NO
Input
一個字符串,長度 1 <= len <= 10000,保證字符串只由小寫字母(a~z)來構成.
Output
如果該字符串能通過重新排列後能達到迴文串,輸出YES,否則輸出NO
Sample Input
zlylz
Sample Output
YES
Hint
迴文串”是一個正讀和反讀都一樣的字符串,比如“level”或者“noon”等等就是迴文串。
對於輸入:aabbcd
正確的輸出是:NO
對於輸入:aabbc
正確的輸出是:YES
#include <bits/stdc++.h>
using namespace std;
struct node
{
int ci;
char zi;
};
char a[100050];
int main()
{
while(cin>>a)
{
node n[100050];
n[0].zi=a[0];
n[0].ci=1;
int k=1;
int len=strlen(a);
for(int i=1; i<len; i++)
{
int flag=0;
for(int j=0; j<k; j++)
{
if(n[j].zi==a[i])
{
n[j].ci++;
flag=1;
}
}
if(flag==0)
{
n[k].zi=a[i];
n[k].ci=1;
k++;
}
}
if(len%2==0)
{
int t=0;
for(int i=0; i<k; i++)
{
if(n[i].ci%2!=0)
{
t=1;
break;
}
}
if(t==0)
cout<<"YES"<<endl;
else
cout<<"NO"<<endl;
}
else
{
int t=0;
for(int i=0; i<k; i++)
{
if(n[i].ci%2==1)
t++;
}
if(t==1)
cout<<"YES"<<endl;
else
cout<<"NO"<<endl;
}
}
return 0;
}