1.3 删除重复字符串
注意此题不是指删除连续的重复字符,而是所有重复的字符。两种思路:
1、不用额外的空间。直接在当前字符串上更改,采用类似直接插入排序的方法,将字符串前一部分设为新的字符串,依次判断后续的每一个字符是否在新的字符串中,没有出现则将其添加到新的字符串末尾,否则说明重复,判断下一个字符。最后,将新的字符串末尾置为结束符'\0';(如果是c++的std::string,应该用resize,因为string不通过结束符判断字符串,而是通过内置一个长度判断。)
2、使用额外的空间,则可以考虑使用一个set记录已经出现过的字符,或者这里可以使用数组bool hit[256],这是因为字符最多就256个,初始化为0.每个字符c判断hit[c]是否为0,是则说明未重复,置为1,并加入新的字符串,否则重复,判断下一个。
void removeDuplicates(char *str){ int len = strlen(str); if (len < 2) return; int tail = 1; for (int i = 1; i < len; ++i) { int j; for (j = 0; j < tail; ++j) { if (str[i] == str[j]) break; } if (j == tail) { str[tail] = str[i]; ++tail; } } str[tail] = '\0'; }