vampire209 2014-05-28 00:59 采纳率: 0%
浏览 2625

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

本题是某欧外企面试题,下面给出一个我当时的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 2014-05-28 06:37
    关注

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

    评论

报告相同问题?

悬赏问题

  • ¥30 这是哪个作者做的宝宝起名网站
  • ¥60 版本过低apk如何修改可以兼容新的安卓系统
  • ¥25 由IPR导致的DRIVER_POWER_STATE_FAILURE蓝屏
  • ¥50 有数据,怎么建立模型求影响全要素生产率的因素
  • ¥50 有数据,怎么用matlab求全要素生产率
  • ¥15 TI的insta-spin例程
  • ¥15 完成下列问题完成下列问题
  • ¥15 C#算法问题, 不知道怎么处理这个数据的转换
  • ¥15 YoloV5 第三方库的版本对照问题
  • ¥15 请完成下列相关问题!