本文主要是介绍括弧合法性检测,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
括弧合法性检测
题目描述:给定一个只包含字符’(’,’)’,’{’,’}’,’[‘和’]'的字符串,确定输入字符串是否有效。
有效的字符串应同时满足一下两个条件:
1.必须使用相同类型的括号关闭左括号。
2.必须以正确的顺序关闭左括号。
请注意,空字符串也被视为有效。
输入第一行:一行长度不超过100个字符的待检测字符串
输出第一行:如果括弧合法则输出Yes,否则输出No
样例输入:
()
样例输出:
Yes
乍一看是个括号匹配,交一下竟然WA了。仔细看看,嗯……“正确顺序”,那好吧,再用个栈就好了。
#include<bits/stdc++.h>
using namespace std;
int main()
{stack<char>a;char s[105];cin>>s;int u=strlen(s);for (int i = 0; i < u; i++){if (s[i] == '(' || s[i] == '{' || s[i] == '['){a.push(s[i]);//前括号,入栈}else{if ((a.top() == '(' && s[i] == ')') || (a.top() == '{' && s[i] == '}') ||(a.top() == '[' && s[i] == ']')){a.pop();//后括号,出栈}else{cout << "No" << endl;//如果出现匹配错误,直接退出return 0;}}}if (a.empty())//最后一次要特判,因为最后一个可能是前括号cout << "Yes" << endl;elsecout << "No" << endl;return 0;
}
这篇关于括弧合法性检测的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!