void remove_repeat(const char *src, char *dest)
{
if(!src || !dest)
{
return ;
}
char buff[256]; //为什么是256:因为只要是字符串,ASCII值都在0~255之间
int i = 0, j = 0;
while(src[i] != '\0') //新手warning:不要直接移动dest指针
{
if(buff[src[i]] != 1) //判断该字符之前是否出现过
{
buff[src[i]] = 1; //如果没有出现,设置重复标志位,下次出现该字符就不再录入
dest[j++] = src[i]; //录入目标缓存中
}
i++; //继续录入下一个字符
}
}
测试:
int main()
{
char *src = "hhhheeelloowwwwwooorrrrrlllllddd";
char dest[32] = {0};
remove_repeat(src, dest);
printf("dest = %s \n", dest);
return 0;
}
输出:dest = helowrd
总结
1.时间复杂度:O(n);
2.运用了HASH的思想,也是HASH最基础的一种应用方式。