【ACM】括号配对问题 – 栈详解编程语言

括号配对问题

时间限制:
3000 ms  |  内存限制:65535 KB
难度:
3
 
描述
现在,有一行括号序列,请你检查这行括号是否配对。
 
输入
第一行输入一个数N(0<N<=100),表示有N组测试数据。后面的N行输入多组输入数据,每组输入数据都是一个字符串S(S的长度小于10000,且S不是空串),测试数据组数少于5组。数据保证S中只含有”[“, “]”, “(“, “)” 四种字符
输出
每组输入数据的输出占一行,如果该字符串中所含的括号是配对的,则输出Yes,如果不配对则输出No
样例输入
3 
[(]) 
(]) 
([[]()])
样例输出
No 
No 
Yes
思路:括号匹配问题,读取到左边的括号,入栈,读取到右边的从栈顶拿出进行匹配,失败即为不匹配的串,否则继续处理
  
#include <iostream> 
#include <string> 
using namespace std; 
 
struct stack{ 
    int num; 
    string str; 
}; 
 
int main(){ 
 
    int n; 
    cin>>n; 
    string ss; 
    stack a; 
    int i; 
    while(n--){ 
        cin>>ss; 
        a.num = 0; 
        a.str = ""; 
        if (ss.length()%2!=0) 
        { 
            cout<<"No"<<endl; 
        }else 
        { 
            if (ss[0]!='[' && ss[0]!='(') 
            { 
                cout<<"No"<<endl; 
            } 
            else 
            { 
                for (i = 0 ; i < ss.length(); i++) 
                { 
                    if (ss[i]=='('||ss[i]=='[') 
                    { 
                        a.str = a.str + ss[i]; 
                        a.num++; 
                    } 
                    else if (ss[i]==')') 
                    { 
                        if (a.str[a.num-1]=='(') 
                        { 
                            a.num--; 
                            string temp = ""; 
                            for (int j = 0 ; j < a.num ; j++) 
                            { 
                                temp += a.str[j]; 
                            } 
                            a.str = temp; 
                        } 
                    } 
                    else if (ss[i]==']') 
                    { 
                        if (a.str[a.num-1]=='[') 
                        { 
                            a.num--; 
                            string temp = ""; 
                            for (int j = 0 ; j < a.num ; j++) 
                            { 
                                temp += a.str[j]; 
                            } 
                            a.str = temp; 
                        } 
                    } 
                } 
                if (i==ss.length() && a.num==0) 
                { 
                    cout<<"Yes"<<endl; 
                }else{ 
                    cout<<"No"<<endl; 
                } 
            } 
 
        } 
 
    } 
 
    return 0; 
}        

原创文章,作者:ItWorker,如若转载,请注明出处:https://blog.ytso.com/tech/pnotes/20703.html

(0)
上一篇 2021年7月19日 23:42
下一篇 2021年7月19日 23:42

相关推荐

发表回复

登录后才能评论