您的位置:首页 > 其它

回文字符串

2014-04-30 18:35 232 查看
#include<stdio.h>

#include<string.h>
int a[27],vis[11],len,k,t,cnt;
char str[11],temp[6],b_str[6],jd_str[121][6],c;
int judge()
{
int i;
for(i = 0;i < t;i ++)
if(!strcmp(jd_str[i],temp))
return 0;
strcpy(jd_str[t++],temp);
return 1;
}

void dfs(int n)
{
int i,j;
if(n == len && judge())
{
printf("%s",temp);
if(cnt == 1)
printf("%c",c);
for(j = len-1;j > 0;j --)
printf("%c",temp[j]);
printf("%c\n",temp[0]);
return ;
}
for(i = 0;i < len;i ++)
{
if(!vis[i])
{
vis[i] = 1;
temp[k++] = b_str[i];
dfs(n+1);
k--;
vis[i] = 0;
}
}
}

int main()
{
int i,j,m;
while(~scanf("%s",str))
{
memset(temp,0,sizeof(temp));
memset(vis,0,sizeof(vis));
memset(a,0,sizeof(a));
memset(b_str,0,sizeof(b_str));
m = k = 0;
t = cnt = 0;
len = strlen(str);
for(i = 0;i < len;i ++)
a[str[i]-'a']++;
for(i = 0;i < 27;i ++)
{
if(a[i] % 2)
{
cnt++;
c = i+'a';
}
if(cnt > 1)
break ;
}
if(cnt > 1)          //判断是否有回文存在
printf("no palindrome!\n");
    else if(len == 1)
      printf("%s\n",str);
else
{
for(i = 0;i < 27;i ++)
{
for(j = 0;j < a[i] >> 1;j ++)
b_str[m++] = i+'a';
}
len = strlen(b_str);
dfs(0);
}
}
return 0;
}


[/code]
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: