void removeDuplicates(char* str) { if (!str) return; int len = strlen(str); if (len < 2) return; int tail=1; int j=0; for(int i = 1; i < len; i++) { for(j = 0; j < tail; j++) { if(str[i] == str[j]) break; } if(tail == j) str[tail++] = str[i]; } str[tail] = '0'; } 终于搞明白是怎么回事情了,其实tail是一个point,来表示现在从左边数起第几个是需要check的,如果发现重复的,i 就继续往后走,tail不动。其实就是tail之前的所有的值都是不重复的,后面慢慢check.