前言:
这篇文章是为了帮助一些
像我这样的菜鸟
找到简单的题解
问题描述:
描述
假设表达式中允许包含圆括号和方括号两种括号,其嵌套的顺序随意,如([]())或[([][])]等为正确的匹配,[(])或([]()或(()))均为错误的匹配。
本题的任务是检验一个给定表达式中的括号是否正确匹配。
输入一个只包含圆括号和方括号的字符串,判断字符串中的括号是否匹配,匹配就输出“OK”,不匹配就输出“Wrong”。
输入描述
一行字符,只含有圆括号和方括号,个数小于255。
输出描述
匹配就输出一行文本“OK”,不匹配就输出一行文本“Wrong”。
用例输入 1
[(])
用例输出 1
Wrong
问题解析:
这是基本数据结构的一道水题
需要用到栈
一个个推入栈并判断匹配
最后输出
栈的简介:
栈 stack<>

1、栈(Stack)是一种线性存储结构,它具有如下特点:
(1)栈中的数据元素遵守“先进后出"(First In Last Out)的原则,简称FILO结构。(后进先出的叫法,也是可以的)
(2)限定只能在栈顶进行插入和删除操作。
2、栈的相关概念:
(1)栈顶与栈底:允许元素插入与删除的一端称为栈顶,另一端称为栈底。
(2)压栈:栈的插入操作,叫做进栈,也称压栈、入栈。
(3)弹栈:栈的删除操作,也叫做出栈。
3、栈的常用操作为:
(1)弹栈,通常命名为pop
(2)压栈,通常命名为push
(3)求栈的大小
(4)判断栈是否为空
(5)获取栈顶元素的值
栈的函数
| s.empty(); | 如果栈为空则返回true, 否则返回false |
| s.size(); | 返回栈中元素的个数 |
| s.top(); | 返回栈顶元素, 但不删除该元素 |
| s.pop(); | 弹出栈顶元素, 但不返回其值 |
| s.push(); | 将元素压入栈顶 |
stack栈:相关资料
题目代码:
先写好变量一切的开始
stack<char> s;//定义一个栈
string a;//输入的字符串
变量比较少
然后是判定匹配字符的函数
bool ac()//一个吉利的名字
{
if(a.size()%2) return false;//如果是奇数则肯定多一个字符匹配失败
for(int i=0;i<a.size();i++)
{
if(a[i]=='[' || a[i]=='(') s.push(a[i]);//如果为前半段则压入栈
else if(a[i]==']')//入果为 ] 则判断前面是不是 [
{
if(s.empty() || s.top()!='[') return false;//前面不是 [ 匹配失败
else s.pop();//匹配成功
}
else if(a[i]==')')//入果为 } 则判断前面是不是 {
{
if(s.empty() || s.top()!='(') return false;//前面不是 { 匹配失败
else s.pop();//匹配成功
}
}
return s.empty();//如果没剩余说明匹配成功
}
最后是主函数部分
照题目输入输出即可
int main()
{
cin>>a;//读入字符串
if(ac()) cout<<"OK"<<endl;//如果匹配成功 输出"OK"
else cout<<"Wrong"<<endl;//如果匹配失败 输出"Wrong"
return 0;
}
完整代码:
#include<bits/stdc++.h>
using namespace std;
stack<char> s;//定义一个栈
string a;//输入的字符串
bool ac()//一个吉利的名字
{
if(a.size()%2) return false;//如果是奇数则肯定多一个字符匹配失败
for(int i=0;i<a.size();i++)
{
if(a[i]=='[' || a[i]=='(') s.push(a[i]);//如果为前半段则压入栈
else if(a[i]==']')//入果为 ] 则判断前面是不是 [
{
if(s.empty() || s.top()!='[') return false;//前面不是 [ 匹配失败
else s.pop();//匹配成功
}
else if(a[i]==')')//入果为 } 则判断前面是不是 {
{
if(s.empty() || s.top()!='(') return false;//前面不是 { 匹配失败
else s.pop();//匹配成功
}
}
return s.empty();//如果没剩余说明匹配成功
}
int main()
{
cin>>a;//读入字符串
if(ac()) cout<<"OK"<<endl;//如果匹配成功 输出"OK"
else cout<<"Wrong"<<endl;//如果匹配失败 输出"Wrong"
return 0;
}
题目测评:

样例通过



1358

被折叠的 条评论
为什么被折叠?



