ZOJ----问题 E: 括弧合法性检测(栈的使用)

    xiaoxiao2025-06-03  98

    苍茫大地一剑尽挽破,何处繁华笙歌落。斜倚云端千壶掩寂寞,纵使他人空笑我。

    题目描述

    给定一个只包含字符'(',')','{','}','['和']'的字符串,确定输入字符串是否有效。 有效的字符串应同时满足一下两个条件: 1.必须使用相同类型的括号关闭左括号。 2.必须以正确的顺序关闭左括号。 请注意,空字符串也被视为有效。

     

    输入

    第一行:一行长度不超过100个字符的待检测字符串

     

    输出

    第一行:如果括弧合法则输出Yes,否则输出No

     

    样例输入

    复制样例数据

    ()

    样例输出

    Yes #include<iostream> #include<cstdio> #include<cmath> #include<cstring> #include<string> #include<map> #include<algorithm> #include<iomanip> #include<queue> #include<set> #include<stack> using namespace std; int main() { string s=""; int i,l; stack<char>t; cin>>s; getchar(); l=s.length(); if(l==0) cout<<"Yes"<<endl; else if(l%2==1) cout<<"No"<<endl; else { for(i=0;i<l;i++) { if(s[i] == '(' || s[i] == '['||s[i]=='{') t.push(s[i]); else if(s[i] == ')' || s[i] == ']'||s[i]=='}') { if(t.empty()||(t.top()=='('&&s[i]!=')')||(t.top()=='['&&s[i]!=']')||(t.top()=='{'&&s[i]!='}')) { cout<<"No"<<endl; return 0; } else t.pop(); } } if(t.empty()) cout<<"Yes"<<endl; else cout<<"No"<<endl; } return 0; }

     

    最新回复(0)