1005: 小明爱字符串
Time Limit: 1 Sec Memory Limit: 128 MB 64bit IO Format: %lld
Submitted: 512 Accepted: 109
[Submit][Status][Web Board]
Description
小明喜欢回文串,给出一个字符串,小明可以交换其中任意两个字符的位置或或者改变其中一个字符或者什么也不做,问小明能否得到回文串。
Input
多组测试,一行一个字符串,保证全部是小写字母,长度不超过100000。
Output
如果可以得到回文串,输出666,否则输出TNT。
Sample Input
abc
acbac
aabc
Sample Output
666
666
TNT
#include <stdio.h>
#include <string.h>
char s[100010];
int main()
{
while(gets(s)!=NULL)
{
int len=strlen(s);
int i,j,cnt=0;
int a[8],k=0;
for(i=0,j=len-1;i<=j;i++,j--)
{
if(s[i]!=s[j])
{
a[k++]=i;//记录不同字母的下标
cnt++;
}
if(cnt>2)//不同字母个数超过两个则不可能
{
printf("TNT\n");
break;
}
}
// printf("----%d %d--------%d\n",a[0],a[1],cnt);
if(cnt<=1)
printf("666\n");
else if(cnt==2)
{
int ss=0;
int str[30]={0};
str[s[a[1]]-'a']++;
str[s[a[0]]-'a']++;
str[s[len-1-a[1]]-'a']++;
str[s[len-1-a[0]]-'a']++;
for(int p=0;p<30;p++)
if(str[p])
ss++;
if(ss==2)//只要不相同的两组字母为两对相同字母则可以通过交换使其成为回文串,例如:accbba,acbcba
printf("666\n");
else
printf("TNT\n");
}
}
return 0;
}