week10签到题(思路)

问题描述

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

Input

(2 ≦ |X| ≦ 200,000)

Output

输出最终串的长度

Sample input

TSTTSS

Sample output

4

解题思路

题意就是不断删除这个那个字符串中的ST,仔细想想我们会发现,这道题其实很简单,记最终结果为ans,其中S的个数为anss,T的个数为anst,每当我们发现一个S,那么直接anss++;但是如果当前字符是T,anst++,并且如果anss!=0的话,说明前面一定有S,并且一定靠着这个T(如果不靠着T是不可能的,因为每一对ST都会被削掉,当前T的前面要么全是T,要么就是TTTSS这种类型的),因此我们就让anss–,anst–。最终遍历完这个字符串直接输出anst+anss即可。

完整代码

#include <iostream>
#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <string>
using namespace std;

long long anss,anst;
string s;
int main()
{
    cin>>s;
    for (int i=0; i<s.size(); i++){
        if(s[i]=='S') anss++;
        else {
            anst++;
            if(anss) anss--,anst--;
        }
    }
    cout<<anss+anst<<endl;
    return 0;
}
原创文章 61 获赞 58 访问量 6482

猜你喜欢

转载自blog.csdn.net/weixin_43347376/article/details/105694794