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取出来,进行排序,找出对应的值就行了

    评论

报告相同问题?

悬赏问题

  • ¥15 执行 virtuoso 命令后,界面没有,cadence 启动不起来
  • ¥50 comfyui下连接animatediff节点生成视频质量非常差的原因
  • ¥20 有关区间dp的问题求解
  • ¥15 多电路系统共用电源的串扰问题
  • ¥15 slam rangenet++配置
  • ¥15 有没有研究水声通信方面的帮我改俩matlab代码
  • ¥15 ubuntu子系统密码忘记
  • ¥15 保护模式-系统加载-段寄存器
  • ¥15 电脑桌面设定一个区域禁止鼠标操作
  • ¥15 求NPF226060磁芯的详细资料