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 数值计算均差系数编程
  • ¥15 redis-full-check比较 两个集群的数据出错
  • ¥15 Matlab编程问题
  • ¥15 训练的多模态特征融合模型准确度很低怎么办
  • ¥15 kylin启动报错log4j类冲突
  • ¥15 超声波模块测距控制点灯,灯的闪烁很不稳定,经过调试发现测的距离偏大
  • ¥15 import arcpy出现importing _arcgisscripting 找不到相关程序
  • ¥15 onvif+openssl,vs2022编译openssl64
  • ¥15 iOS 自定义输入法-第三方输入法
  • ¥15 很想要一个很好的答案或提示