Description | ||
Palindrome题目描述给你一个只含有英文小写字母的字符串,你可以无限次交换任意相邻的两个字符,请问是否能将字符串变为回文串。 所谓“回文串”,就是字符串从左到右读,和从右到左读是一样的字符串。 输入存在不超过1000个样例。 每行一个字符串,不超过1000个字符。 输出每行输出一个样例的结果,如果原串可以变成回文串,输出"Yes",否则输出"No"。 样例输入abcd aaaa 样例输出No Yes |
审题,回文串,即对称,所以每个字母出现的次数是偶数可以关于中心对称,
但是也可以出现一个或者0个 奇数=偶数+1;(1)即放在正中间,左右仍是对称的。
所以先记录每个字母出现的次数,然后判断是否对称。
#include<stdio.h>
#include<string.h>
int main()
{
char str[1001];
while(scanf("%s", &str)!=EOF){
int a[27] = {0};
int len = strlen(str);
for(int i=0;i<len;i++){
a[str[i]-'a']++;
}
int ji=0;
int flag = 1;//1 is yes
for(int i=0;i<26;i++){
if(a[i]%2!=0){
ji++;
}
}
if(ji!=1)flag=0;
if(ji==0)flag=1;
if(flag==1)printf("Yes\n");
else printf("No\n");
}
return 0;
}