题解 | #点击消除#
点击消除
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;
}
腾讯成长空间 1110人发布