题解:P13414 [COCI 2012/2013 #4] ESEJ

· · 题解

思路

一道水题。 \\

不看标签都不难发现这题可以直接用栈来模拟。所谓栈,就是一种后进先出的数据结构,就好比我们吧若干个物品放在一个桶里,那么后放进去的物品肯定是先拿出来。这题也是一样,我们把一个个字母都一次放入栈中,如果发现栈顶元素与当前字母相同,那就可以直接消掉,最后再看一下栈是否为空就行啦!

代码

#include<bits/stdc++.h>
using namespace std;
int ans=0;
void solve()
{
    string s;cin>>s;
    stack<int> stk;//这里用到的是STL里的栈,当然手写也是可以的。
    //top():返回栈顶元素
    //pop():弹出栈顶元素
    //push(x):将x压入栈
    //empty():判断栈是否为空,若为空返回true
    for(char x:s)//枚举字符
     {
        if(!stk.empty()&&stk.top()==x) stk.pop();//如果与栈顶元素相同,弹出元素
        else stk.push(x);//将当前字符压入栈中
     }
    if(stk.empty()) ans++;//如果栈空,则累计答案
}
int main()
{
    int t;cin>>t;
    while(t--) solve();
    cout<<ans;
    return 0;
}