点击消除主要的思路在于,想到栈的使用,在字符串创建的过程中,每一次遇到与最后一位字符相等的时候,就可以消除了,即每次输入的字符与栈顶比较,相等消除,不等或栈空则入栈。
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#define MAX 300001

charresult(charstr) {
    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;
}