这个算法并不是最优的。但是在内存空间充足时效率是最高的。
eg:
input: str = "aabbccassbsc";
output: str = "abcs";
思路:1.创建一个hashmap 因为都是ASCII的字符 就简单使用 char hash[100]来用即可。
2.再创建一个够大的字符串备份。str_bakup 把去重的结果放到此数组中。
3.最后cpy。
遍历次数:2n; 空间复杂度:2*SIZE+100;
void str_distinct(char * str)
{
char hash[100] = {0}; //标记已存在的 hashmap
int len = strlen(str);
char str_bakup[60]; //备份的字符串
int cnt = 0;
for(int i = 0; i < len; i++) {
if( !hash[*(str+i)-'a'] ) {
hash[*(str+i)-'a'] = 1;
*(str_bakup+cnt++) = *(str+i);
}
}
*(str_bakup+cnt) = '\0';
strcpy(str, str_bakup);
}