括号配对问题

来源:互联网 发布:知乎 注册信贷分析师 编辑:程序博客网 时间:2024/06/07 03:12

问题描述:现在,有一行括号序列,请你检查这行括号是否配对。

第一行输入一个数N,表示有N组测试数据。后面的N行输入多组输入数据,每组输入数据都是一个字符串S(S的长度小于   10000,且S不是空串),测试数据组数少于5组。数据保证S中只含有"[","]","(",")"四种字符

解决思路:一对配对的括号,包含左右两个括号。遍历字符串,把左括号压入 栈中,遇到右括号时,栈不为空且栈顶元素是相匹配

左括号时,将栈顶元素pop。

#include<iostream>#include<string>#include<stack>using namespace std;int main(){int N;cin >> N;string ch[5];int i = 0;while (i < N){cin >> ch[i++];}int j = 0;while (j<N){stack<char> s;string mark="Yes";for (int i = 0; i < ch[j].length(); i++){if (ch[j][i] == '('){s.push(ch[j][i]);}else if (ch[j][i] == ')'){if (s.empty() || s.top() != '('){mark="No"; break;}else{s.pop();}}else if (ch[j][i] == '['){s.push(ch[j][i]);}else if (ch[j][i] == ']'){if (s.empty()||(s.top()!='[')){mark = "No";break;}else{s.pop();}}}j++;cout << mark << endl;}system("pause");}

不是最佳方法,在南阳理工acm提交时runtimeerror,水平有待提高。。。。

原创粉丝点击