主要思路:
思路简单,维护一个栈,当遇到T时,去检查栈顶是否为S,若是则弹出;其他情况则将其入栈,最终输出栈大小
A:签到题
东东有一个字符串X,该串包含偶数个字符,一半是 S 字符,一半是 T 字符
东东可以对该字符串执行 1010000 次操作:如果存在 ST 是该串的子串,则删除掉最左边的 ST。
即 TSTTSS⇒TTSS、SSSTTT⇒SSTT⇒ST⇒空
Input
字符串X
(2 ≦ |X| ≦ 200,000)
Output
输出最终串的长度
Sample Input
TSTTSS
Sample Output
4
A Possible Solution
#include<stdio.h>
const int maxn=2e5;
char s[maxn],sk[maxn],tmp;
int cnt=0;
int main(){
scanf("%s",s);
for(int i=0;s[i]!='\0';i++){
if(!cnt){
sk[cnt]=s[i];
cnt++;
}
else if(s[i]=='T' && sk[cnt-1]=='S'){
cnt--;
}
else{
sk[cnt]=s[i];
cnt++;
}
}
printf("%d\n",cnt);
return 0;
}