一般难度的题。
深入推导过程:http://blog.youkuaiyun.com/ydianh/article/details/10382313
题目详情
1.
输入:字符全为一种字符时,如全为a、全为b、全为c;
输出:输入的字符串的原长度;
2.
输入:num_a, num_b, num_c全为偶数;
输出:2
3.
输入:num_a, num_b, num_c其中有一个为奇数;
输出:1
4.
输入:num_a, num_b, num_c其中有两个为奇数;
输出:1
5.
输入:num_a, num_b, num_c全为奇数;
输出:2
代码:
#define MAX(a,b) ((a)>(b)?(a):(b))
int minLength(const char *s)
{
int alllen=0;
int a_num=0,b_num=0,c_num=0;
const char *ps=s;
int i=0;
int max_1z,max_2y,max_3x;//对abc数量排序用
if(NULL==s||(alllen=strlen(s))==0)
return 0;
for(i=0;i<alllen;++i,++ps)
{//得到abc的长度
switch(*ps)
{
case 'a':
++a_num;
break;
case 'b':
++b_num;
break;
case 'c':
++c_num;
break;
default:
printf("%d,%d\n",i,alllen);
break;
}
}
if((a_num+b_num+c_num)!=alllen)
return -1;
//判断是否只有一种字符组成
if(a_num==alllen||b_num==alllen||c_num==alllen)
return alllen;
//对得到的字符个数排序max_1z>=max_2y>=max_3x
if(a_num>=b_num)
{
max_1z=MAX(a_num,c_num);
max_2y=MAX(a_num+c_num-max_1z,b_num);
max_3x=alllen-max_1z-max_2y;
}
else
{
max_1z=MAX(b_num,c_num);
max_2y=MAX(b_num+c_num-max_1z,a_num);
max_3x=alllen-max_1z-max_2y;
}
//判断奇偶性
if((max_2y-max_3x+2)%2!=0||(max_1z-max_2y-2)%2!=0)
return 1;
if((max_1z-max_2y-2)%2==0)
return 2;
return -1;//不会执行
}