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
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!
其他相关推荐
1.4 写一个函数判断两个字符串是否使用相同的字符构成。
java 判断两个字符串是否由相同的字符组成 排序算法 空间换时间的方法
编写一个js函数求一个字符串数组按字符串中各字母出现次数多少的重新排序
c用c语言编写一个函数,连接两个字符串
【c语言】为下面的函数原型编写函数定义,这个字符串参数必须包含一个或者多个数字,函数应该把这些数字字符转换为整数并返回这个整数。
编写一个函数 int count_chars(char const *str,char const *chars) 函数应该在第一个参数中进行查找, 并返回匹配第二个参数所包含的字符的数量。
【C语言】为下面的函数原型编写函数定义: int ascii_to_integer(char *str); 这个字符串参数必须包含一个或者多个数字,函数应该把这些数字字符转换为整数并返回这个整数。
通过键盘输入一串小写字母(a~z)组成的字符串。请编写一个字符串过滤程序,若字符串中出现多个相同的字符,将非首次出现的字符过滤掉。 比如字符串“abacacde”过滤结果为“abcde”。
编写函数void count(char a[],char w[][10],int n,int b[])。功能是:统计w指向的数组中的n个单词在a指向的字符串中各自出现的次数(将非字母字符看作单词分
练习6-2 编写一个程序,用以读入一个C语言程序,并按字母表顺序分组打印变量名,要求每一组内各变量名的前六个字符相同,其余字符不同