【C语言--点击消除】

C语言–点击消除

描述

描述
牛牛拿到了一个字符串。
他每次“点击”,可以把字符串中相两个相同字母消除,例如,字符
串”abbc"点击后可以生成"ac".
但相同而不相邻、不相同的相邻字母都是不可以被消除的。
牛牛想把字符串变得尽可能短。他想知道,当他点击了足够多次之后,字符串的最终形态是什么?

输入描述

一个字符串,仅由小写字母组成。(字符串长度不大于300000)

输出描述

一个字符串,为“点击消除”后的最终形态。若最终的字符串为空串,则输出0.

案例

输入:abbac
输出:c
输入:abba
输出:0

思路

用栈思想(这里的栈用数组表示),先拿第一个字符放入栈中,以后拿字符进栈时与前一个数比较一下,如果不相等就不管,若相等就把数组下标减小1,后面的字符把它覆盖即可。

代码

#include <stdio.h>
int main()
{
	char ch[100];//假设这是栈
	int i = 0;
	ch[0] = getchar();
	for (i = 1; (ch[i] = getchar()) != '\n'; )
	{
		if (i > 0 && ch[i] == ch[i - 1])
		{
			i = i - 2;//下标先向前移动2,后面i++,相等于就移动了一位。那为什么不直接写成i=i-1并把后面的i++去掉呢,
			          //因为当这个字符与前面的字符不相同时,就进不了循环,但是拿字符这个动作不能停下,所以必须i++.
		}
		i++;

	}
	ch[i] = '\0';//%s 遇到 \0 才停下
	//输出
	if (i == 0)
	{
		printf("0");
	}
	else
	printf("%s", ch);

	return 0;
}

运行结果

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

创作过程不易,如果对您有帮助,可以点个免费的小心心吗

  • 38
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值