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;
}