题目:
现在,有一行括号序列,请你检查这行括号是否配对。
输入格式:
第一行输入一个数N(0<N<=100),表示有N组测试数据。后面的N行输入多组输入数据,每组输入数据都是一个字符串S(S的长度小于10000,且S不是空串),测试数据组数少于5组。数据保证S中只含有”[“, “]”, “(“, “)” 四种字符
输出格式:
每组输入数据的输出占一行,如果该字符串中所含的括号是配对的,则输出Yes,如果不配对则输出No
输入样例:
1 | 3 |
输出样例:
1 | No |
思路
给定一个括号序列,看序列是否合法,关键要明白如何判定序列是不合法的,而不合法其实就是有括号没有被正确地匹配掉,从左向右去遍历序列,它可包括以下三种情况:第一,遍历到了右括号,但是之前没有左括号和它匹配了;第二,遍历到了右括号,在它之前有左括号,但是很遗憾,不满足大对大、中对中、小对小,匹配不上;第三,遍历结束了,发现还有左括号没有被匹配掉。切记情况一定要讨论清楚了。结合上述,又因为每次匹配的时候,遍历到的那个右括号必须是和之前最后遇到的左括号匹配(显然,毕竟数学上不就这么用的么),所以我们会想到用stack这个特性为后进先出的数据结构来实现以上操作。代码如下:
代码
1 |
|