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

· · 题解

题意:判断 AB 组成的单词是否是好单词。一个好单词要求每个字母都能与另一个相同的字母配对且所有配对的弧线不能相交。

只需要遍历每个字母,如果栈顶字母和当前字母相同,弹出栈顶,否则就把它压入栈,最后判断栈是否为空,为空就说明全部配对完成。

#include<bits/stdc++.h>
using namespace std;
bool pd(const string &a) {
    stack<char>s; 
    for(size_t i=0;i<a.size();i++) {
        if(!s.empty()&&s.top()==a[i])s.pop(); //判断栈顶字母是否和当前字母相同,相同弹出栈顶。
        else s.push(a[i]);  //不同把它压出栈。
    }
    return s.empty(); 
}
int n,ans; 
string a;   
int main() {
    cin>>n;
    for(int i=0;i<n;i++) {
        cin>>a;
        if(pd(a))ans++;  
    }
    cout<<ans;  
}