Week10 限时大模拟 A - 签到题 AtCoder - agc005_a

题目描述:

东东有一个字符串X,该串包含偶数个字符,一半是 S 字符,一半是 T 字符
东东可以对该字符串执行 1010000 次操作:如果存在 ST 是该串的子串,则删除掉最左边的 ST。
即 TSTTSS⇒TTSS、SSSTTT⇒SSTT⇒ST⇒空

思路:

把字符串中的字符按顺序放入栈中,如果栈顶的两个元素是ST,则弹出,否则不做操作;重复此过程,最后栈中的字符串就是答案

代码:

//O(n)
#include <cstdio>
#include <iostream>
#include <string>
#include <stack>
using namespace std;
stack<char> St;
int main()
{
	string s;
	cin>>s;
	auto len=s.size(),ans=len;
	char last,now;
	//字母都在栈里面,当栈顶两个元素可以弹出时,就一直弹出 
	for(int i=0;i<len;i++)
	{
		St.push(s[i]);
		while(St.size()>=2)
		{
			char c2=St.top(); St.pop();
			char c1=St.top(); St.pop();
			if(c1=='S'&&c2=='T') continue;
			else
			{
				St.push(c1);
				St.push(c2);
				break;
			}
		}
	}
	cout<<St.size()<<endl;
	return 0;
}

  

猜你喜欢

转载自www.cnblogs.com/qingoba/p/12922980.html