随机给一个string,去掉连续重复字符后,新的字符串如果有连续重复字符则继续去掉,直到没有连续在一起的相同字符,比如180008935531,最后变成191。
群里有人说一个栈和一个for就能解决,O(n)的时间复杂度。
我对算法不熟悉,花了几个小时才想出来,还不知道有没有Bug。
代码如下:
#include <stdio.h>
//#include <string.h>
int main() {
char a[] = "180008935531";
int i, j, flag = 0; //注意标志位的初始化
int length = sizeof(a) - 1; //不使用strlen(a),这样能少用一个头文件
for(i = 0, j = 1; j <= length;) { //i,j从开头一起往后移动,字符串结束符'\0'也在比较范围内
if(a[i] == a[j]) {
j++; //连续两个字符相同则j继续往后比较字符是否相同
flag = 1; //出现连续相同字符
} else {
if(flag) {
if(i > 0) { //i不指向第一个字符,则继续往前移动一位
i--;
} else {
a[i] = a[j]; //i已经是第一个字符,则把a[j]赋给a[j],j继续往后比较
j++;
}
flag = 0; //标志位置0
} else {
i++; //没有连续相同字符则将a[j]接到目标字符串后面
a[i] = a[j];
j++; //j继续往后移动比较
}
}
}
puts(a);
return 0;
}