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;
}

浙公网安备 33010602011771号