设计算法并写出代码移除字符串中重复的字符,不能使用额外的缓存空间。注意: 可以使用额外的一个或两个变量,但不允许额外再开一个数组拷贝。
简单题直接上代码:
#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!
004字符串去重 (keep it up)
时间: 2024-10-11 11:31:32