设计算法并写出代码移除字符串中重复的字符,不能使用额外的缓存空间。注意: 可以使用额外的一个或两个变量,但不允许额外再开一个数组拷贝。
简单题直接上代码:
#include <stdio.h>
#include <string.h>
void remove_duplicate(char vStr[])
{
int Len = strlen(vStr);
if (!Len)
{
printf("the string is NULL\n");
return ;
}
int Count = 0;
for (int i=0; i<Len; ++i)
{
if (vStr[i] != '\0')
{
vStr[Count++] = vStr[i];
for (int k=i+1; k<Len; ++k)
{
if (vStr[i] == vStr[k])
{
vStr[k] = '\0';
}
}
}
}
vStr[Count] = '\0';
}
void remove_duplicate2(char vStr[])
{
int Len = strlen(vStr);
if (!Len)
{
printf("the string is NULL\n");
return ;
}
bool Visited[256];
memset(Visited, 0, sizeof(Visited));
int Count = 0;
for (int i=0; i<Len; ++i)
{
if (!Visited[vStr[i]])
{
vStr[Count++] = vStr[i];
Visited[vStr[i]] = true;
}
}
vStr[Count] = '\0';
}
void test()
{
char Str[] = "13434343435568889hhhhhhhfdcvbb";
remove_duplicate(Str);
printf("%s\n", Str);
}
keep it up 每周都写几道算法题,entertainment!