消除相邻字符

字符串消消乐?
给定一个字符串,删除相邻两个相同的字符。
例如:
给定: “abbabc”
输出:“bc"

思路:
1、乍一看,是不是应该挨个便利,每次遍历消去原始就两两相邻的,在第二遍来消除剩下的,直到没有相同的,咋直到消除完了?直接看某一次长度不在变化,可能来个flag 辅助判断。会遍历几次?两两相消,那么最多字符串的一半那么多次。

2、想一想,其实遍历那么多次是不是不需要的,每次找到相邻的以后,直接消除,消除后下一个和之前没有消除的比较,看相同不,直到到达字符串结尾。刚好栈就可以完成这一任务

注意点:
1、栈空不能再取top() 所以取之前要判空,由于c++多个条件时候,条件从左向右,那么只需要把判空放在前面就好。
2、最后拼结果的时候,直接用库函数insert, 不用挨个加再转置了。

代码:

std::string delete_duplicated(std::string input_demo) {
	if (input_demo.size() < 1)
		return input_demo;
	std::stack<char> tmp;
	tmp.push(input_demo[0]);
	for (int i = 1; i < input_demo.size(); ++i) {
		if (!tmp.empty() && input_demo[i] == tmp.top())
			tmp.pop();
		else
			tmp.push(input_demo[i]);
	}
	std::string result = "";
	while (!tmp.empty()) {
		result.insert(result.begin(),tmp.top());
		tmp.pop();
	}
	return result;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值