题解 | #点击消除#

点击消除

https://www.nowcoder.com/practice/8d3643ec29654cf8908b5cf3a0479fd5

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int main() {
    // 输入字符串
    char* s_i = (char*)malloc(sizeof(char) * 300000);
    while (scanf("%s", s_i) != EOF) {
        // 栈
        char* s_s = (char*)malloc(sizeof(char) * 300000);
        // 记录栈尾位置和输入字符串的检索位置
        int s_len = 0;
        int i_h = 0;
        // 向向s_s中压入一个字符
        *s_s = *(s_i+i_h);
        s_len ++;
        i_h ++;
        // 循环判断能否消除
        int i_len = strlen(s_i);
        while (i_h < i_len) {
            // 如果s_s的长度不为0且可以对消
            if (s_len != 0 && *(s_s + s_len - 1) == *(s_i+i_h)) {
                s_len --;
            } else {
                // 若s_s的长度等于0,或者不能对消,则取s_i的首位压入s_s
                *(s_s + s_len) = *(s_i+i_h);
                s_len ++;
            }
            i_h ++;
        }
        // 如果s_s中没有字符了
        if(s_len==0) printf("%d", 0);
        // 如果s_s中有字符
        else
        { 
            *(s_s+s_len) = '\0';
            printf("%s", s_s);
        }
        free(s_s);
    }
    free(s_i);
    return 0;
}

全部评论

相关推荐

评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务