题目:给定字符串要求去除相邻的相同字符。 比如 abbccd 最后结果是abcd,要求时间复杂度o(n), 空间复杂度o(1)
思路:遍历过程中,记录相同字符的长度,如果出现字符不相等时,将不相等字符移动到第一次重复的字符位置,如此,一遍遍历完成后,即可实现。
1 #include <stdio.h>
2 #include <stdlib.h>
3 #include <assert.h>
4 void removedup(char *str)
5 {
6 assert(str);
7 int i = 0;
8 int k = 0;
9 for (; str[i] ; i++)
10 {
11 if (str[i + 1] && str[i + 1] == str[i])
12 k++;
13 else
14 str[i-k] = str[i];
15 }
16 str[i-k] = '\0';
17 }
42 int main(int argc, char *argv[])
43 {
44 char tempstr[] = "abbcdddddccccccccccccccccccccd";
45 printf("before remove dup: %s\n", tempstr);
46 removedup(tempstr);
47 printf("after remove dup: %s\n", tempstr);
48 return 0;
49 }
结果:
before remove dup: abbcdddddccccccccccccccccccccd
after remove dup: abcdcd