用两个指针来比较元素,分别从下标为0和1开始。
1.若是两个元素一样,则左指针左移一位,右指针右移一位,继续比较,相当于用消消乐消去了这两个一样的元素。
2.若两个元素不一样,保留前者,检验后者,那么就要把两个指针都要往右移一位,继续比较下一组相邻的元素,
3.left+1之后s[left]的新值为比较时的s[right],而right++。
4.如果首元素也消掉了,下标减为-1,那下次比较只得从首元素开始,那么就把left变为0继续比较,s[left]为之前的s[right],而right++。
直到右指针指向结束符\0就结束。
此时下标left指的是最后一个没有消掉的元素。后面加上\0就可以结束了。
char* removeDuplicates(char* s ) { int left = 0, right = 1; while(s[right] != '\0'){ if(left >= 0){ if(s[left] == s[right]){ left--; right++; //元素相同则分别往外移一位继续比较 } else s[++left] = s[right++]; //元素不同则左指针先右移,然后把右指针指的值放到左指针处,再把右指针右移 } else{ left = 0; s[left] = s[right++]; //左下标减到0以下时,右边的值拿过来抵 } s[++left] = '\0'; //最后补上\0表示结束 return s; }