题目描述:
东东有一个字符串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; }