week10簽到題(思路)

問題描述

東東有一個字符串X,該串包含偶數個字符,一半是 S 字符,一半是 T 字符
東東可以對該字符串執行 101000010^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;
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章