点击消除主要的思路在于,想到栈的使用,在字符串创建的过程中,每一次遇到与最后一位字符相等的时候,就可以消除了,即每次输入的字符与栈顶比较,相等消除,不等或栈空则入栈。
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#define MAX 300001
char* result(char* str) {
if (NULL == str || *str == '\0') {
return NULL;
}
int len = strlen(str);
int count = 0;
char* stock = (char*)malloc(sizeof(char) *len);//用数组模拟栈,只要和栈顶相比,一样消除,不一样入栈即可
if (NULL == stock) {
return NULL;
}
int top = -1; //栈空,栈空的情况下只能入栈。
while (*str) {
if (top >= 0 && *str == stock[top]) {
stock[top] = '\0';
top--;
} else {
stock[++top] = *str; //入栈,栈顶是含有字符的最后一位
}
str++;
}
stock[++top] = '\0';//运行结束给栈顶后加'\0'代表字符串结束。
return stock;
}
int main() {
char str[MAX] = {0};
scanf("%s", str);
char* p = NULL;
p = result(str);
if (NULL == p) {
return -1;
}
if (strlen(p) == 0) {
printf("0");
} else {
puts(p);
}
return 0;
}