2 vampire209 vampire209 于 2014.05.28 08:59 提问

编写一个函数,该函数将筛选出两个字符串参数中相同的字符,并按字母序进行排序后返回

本题是某欧外企面试题,下面给出一个我当时的C语言解法,希望请教各位高手们更为高效的解法。

char *func(const char *s1, const char *s2)
{
char temp[256];//ascii_table
memset(temp, 0, sizeof(temp));
char *p1 = s1, *p2 = s2;
int len = 0;
for(; *p1!=0; p1++)
{
if( !temp[*p1] ) temp[*p1] = 1;
}
for(; *p2!=0; p2++)
{
if( temp[*p2]==1 )
{
temp[*p2]++;
len++;
}
}
char *ret = (char *)calloc(1, len+1); //already clear
assert(ret);
p1 = ret; // p1 points to ret-array
int i;
for(i = 0; i {
if(temp[i] > 1)
*p1++ = temp[i];
}
return ret;
}

但是由于其中用到多次for循环,而导致效率并未最好。当然我可以将temp这个ascii数组改为一个大小为26的字母表数组从而减小最后一个for循环的次数。但除此之外,还有什么能够再次进行优化的吗?

1个回答

caokewen123
caokewen123   2014.05.28 14:37

用hashtable来存,key为Ascii码,Value为字符!将两个hashtable的key取出来,进行排序,找出对应的值就行了

Csdn user default icon
上传中...
上传图片
插入图片