欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 新闻 > 焦点 > 数据结构,问题 G: 字符串匹配问题

数据结构,问题 G: 字符串匹配问题

2024/11/15 12:07:48 来源:https://blog.csdn.net/nick_912912/article/details/143456120  浏览:    关键词:数据结构,问题 G: 字符串匹配问题

题目描述

字符串中只含有括号 (),[],<>,{},判断输入的字符串中括号是否匹配。如果括号有互相包含的形式,从内到外必须是<>,(),[],{},例如。输入: [()] 输出:YES,而输入([]), ([])都应该输出NO。

输入

文件的第一行为一个整数n(0<n<20),表示以下有多少个由括号组成的字符串。接下来的n行,每行都是一个由括号组成的长度不超过255的字符串。

输出

在输出文件中有N行,每行都是YES或NO。

样例输入 复制
5
{}{}<><>()()[][]
{{}}{{}}<<>><<>>(())(())[[]][[]]
{{}}{{}}<<>><<>>(())(())[[]][[]]
{<>}{[]}<<<>><<>>>((<>))(())[[(<>)]][[]]
><}{{[]}<<<>><<>>>((<>))(())[[(<>)]][[]]
样例输出 复制
YES
YES
YES
YES
NO
题解 

在做括号匹配一类题目需要注意的点:

  • 在读到右括号选择出栈前要判断栈是否为空
  • 在拿出栈顶做某些判断前判断栈是否为空
  • 在多类右括号问题中,在读取右括号出栈时需要判断栈顶左括号是否匹配
  • 清空st栈 : 
stack<char> ().swap(st);
代码
题解 
#include<bits/stdc++.h>
using namespace std;stack<char> st;int main(){int t;cin >> t;map<char, int>mp;mp['<'] = 1;mp['('] = 2;mp['['] = 3;mp['{'] = 4;map<char, char> mmp;mmp['<'] = '>';mmp['('] = ')';mmp['['] = ']';mmp['{'] = '}';while(t --){string s;cin >> s;bool flag = false;for(char c : s){if(c =='(' || c == '[' || c =='<' || c =='{'){if(st.empty()){st.push(c);}else {char p = st.top();if(mp[p] < mp[c]){flag = 1;break;}else{st.push(c);}}}else{if(st.empty()){flag = 1;break;}else{char p = st.top();if(mmp[p] != c){flag = 1;break;}else st.pop();}}}if(!st.empty() || flag)cout << "NO" << '\n';else cout << "YES" << '\n';stack<char> ().swap(st); }return 0;
}

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com