問題描述
東東有一個字符串X,該串包含偶數個字符,一半是 S 字符,一半是 T 字符
東東可以對該字符串執行 次操作:如果存在 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;
}