练习题(五)

练习题(五)

时间限制: 1 Sec 内存限制: 128 MB
[命题人:171360140]
题目描述
现在,有一行括号序列,请你检查这行括号是否配对。

输入
第一行输入一个数N(0<N<=100),表示有N组测试数据。后面的N行输入多组输入数据,每组输入数据都是一个字符串S(S的长度小于10000,且S不是空串),测试数据组数少于5组。数据保证S中只含有"[", “]”, “(”, “)”, “{”, “}” 六种字符
输出
输出每组输入数据的输出占一行,如果该字符串中所含的括号是配对的,则输出Yes,如果不配对则输出No
样例输入

3
[(])
(])
([[]()])

样例输出

No
No
Yes

来源/分类
寒假练习赛
题目网址: http://47.112.31.182/problem.php?id=1069
题意:
本题就是判断括号是否匹配
思路:
这个题就是一个典型的栈的例题,运用后进先出的思想,遇到左括号时进栈,遇到右括号时与栈顶元素进行匹配,成功了出栈,判断下个元素。
代码:

#include <iostream>
#include <string>   //string头文件
#include <stack>    //stack栈的头文件
using namespace std;
int main()
{
    string s;
    stack<char> st; //创建一个栈
    int n,i,f;
    cin>>n;
    while(n--)
    {
        f=1;
        while(!st.empty())  //清空栈
        {
            st.pop();   //栈顶元素出栈
        }
        cin>>s; //输入字符串s
        for(i=0;i<s.length();i++)   //对字符串中的元素进行遍历
        {
            if(s[i]=='['||s[i]=='('||s[i]=='{')    //左括号进栈
                st.push(s[i]);
            else
            {
                if(st.size()==0)    //该元素为右括号且栈中元素为空
                {
                    f=0;    //标记
                    break;  //结束循环
                }
                if((st.top()=='['&&s[i]==']')||(st.top()=='('&&s[i]==')')||(st.top()=='{'&&s[i]=='}'))  //可以匹配
                    st.pop();   //栈顶出栈
                else    //不能匹配
                {
                    f=0;    //标记
                    break;  //结束循环
                }
            }
        }
        if(f==0||!st.empty())   //标记为0或者栈中元素不为空(不能完全匹配)
            cout<<"No"<<endl;
        else
            cout<<"Yes"<<endl;
    }
    return 0;

运行结果:
在这里插入图片描述
总结:
本题和前面那个括号匹配类似,只是多加一组大括号
括号匹配博客

猜你喜欢

转载自blog.csdn.net/qq_41657977/article/details/86701550