标准题解——括号匹配2#创作计划#
2024-01-06 22:55:07
发布于:广东
69阅读
0回复
0点赞
解题思路
当我们看到这个题的时候,考虑最优的肯定是模拟遍历括号的循环,就是将一个字符串输入进来后,一个一个遍历检测它是否符合标准,也就是题目中的是否合法
所以,我们要完成的有以下几点:
- 确定题目要求
- 寻找最优步骤
- 选择模拟,解决问题
方法点拨
- 将 n 输入,加入循环,因为题目中 表示有个字符串
后每次输入后进行判断是否合法——合法输出YES,不合法输出NO
代码演示
/*写在前面:
以下代码为了美观,空格会有点多
同时,为了避免抄袭题解,会出现语法错误,例如缺少' ;' 等
感谢大家,作者:lan_chance
*/
#include<bits/stdc++.h> //万能头文件
using namespace std;
long long n,l1,l2,d1,d2; //建立变量n和判断用的变量,其中l1和l2为判断'()'的数组,d1和d2是判断'[]'的数组
int main()
{
cin>>n; //输入n
while(n--){ //开始写入n次循环
string s; //按照题目要求建立字符串s,同时准备输入
l1=0,l2=0,d1=0,d2=0; //保证每次循环它的值都为基准值
cin>>s //华丽输入 也可改为:scanf
for(int i=0;i < s.length();i++){ //重头戏——开始准备判断循环
if(s[i]=='(') l1++; //判断‘(’
else if(s[i]==')') l2++; //判断‘)’
else if(s[i]=='[') d1++; //判断‘[’
else if(s[i]==']') d2++; //判断']'
if(l2>l1) break;//如果'()'这个括号不匹配,则结束,直接准备输出NO
if(d2>d1) break;//如果'[]'这个括号不匹配,则结束,直接准备输出NO
}
if(d2!=d1||l1!=l2) printf("No\n");//有括号不合法,华丽输出NO cout也行
else printf("Yes\n") //全部合法,华丽输出YES cout也行
}
return 0;//华丽结束代码!!!!!!!!!
}
感谢大家!@AC君
这里空空如也
有帮助,赞一个