题目
东东有一个字符串X,该串包含偶数个字符,一半是 S 字符,一半是 T 字符
东东可以对该字符串执行 1010000 次操作:如果存在 ST 是该串的子串,则删除掉最左边的 ST。
即 TSTTSS⇒TTSS、SSSTTT⇒SSTT⇒ST⇒空
输入输出
Input
(2 ≦ |X| ≦ 200,000)
Output
输出最终串的长度
Sample Input
TSTTSS
Sample Output
4
思路分析
由于这道题最终只需要输出字符串长度,因此只需要对字符串长度进行加减运算而无需真的去删除“ST”子串。
定义变量cnt计数‘S’的个数,当遇到‘T’且cnt>0(即‘T’前面有‘S’)时,长度减2,最终输出长度即可。
总结反思
这道题其实真的不难,但是考试的时候魔怔了,一直想着怎么动态删除,结果不是数组越界就是情况考虑不全面。结论:一条路不通赶紧换另一条,别在一棵树上吊死。
AC代码
#include<iostream>
#include<string.h>
using namespace std;
string s;
int cnt=0;
int main()
{
cin>>s;
int len=s.length();
for(int i=0;i<s.length();i++)
{
if(s[i]=='S')
cnt++;
if(s[i]=='T')
{
if(cnt>0)
{
cnt--;
len-=2;
}
}
}
cout<<len<<endl;
return 0;
}