在chinaunix论坛里看到的,真的很精妙:
写一个函数fn(),功能是传一个参数是字符串,查找里面有没有相同的字符,有的话返回1,否则0.
两种方法,一是效率最高的,二是最节省内存的.
int fn0(const char *str)
{
char num[256] = {0};
unsigned char *pos = (unsigned char *)str;
while (*pos != 0 && num[*pos] == 0) {
num[*pos++] = 1;
}
return *pos == 0 ? 0 : 1;
}
int fn1(const char *str)
{
const char *p1, *p2;
if (*str == 0)
return 0;
for (p1 = str; *p1 != 0; p1++) {
for (p2 = p1 + 1; *p2 != 0; p2++) {
if (*p1 == *p2)
return 1;
}
}
return 0;
}
本文提供两种检测字符串中是否存在重复字符的方法:一种是最高效的算法实现,通过构建字符计数数组达到线性时间复杂度;另一种是最节省内存的方法,采用双层循环逐个比较字符。
1万+





