平时刷题的时候会经常遇到一个题目,就是给你一串括号有大括号,中括号,小括号,判断给出的括号能否匹配,这种题目大家第一印象肯定是用栈来实现,基本的思路是判断如果是左边括号入栈,如果是右边括号出栈,最后判断栈是否为空。
以前在Leetcode上面刷题的时候遇到这道题,当时我也是按照上面这种常规思路来写的,后来在论坛里面看到有一个大神提供的解法,感觉思路很不错,在这里就把他记录下来。具体思路如下:
遍历字符串,判断如果是左括号,那么将其对应的右括号入栈,主要这里不是将左括号入栈,举个例子比如当前字符为'{'那么就将'}'入栈;当遇到右括号的时候,判断两个条件:
1、栈不为空;
2、栈顶元素出栈,并且等于当前字符相等。
只要这两个条件有一个不满足,那么直接返回false。条件1如果不满足,也是就是栈为空,那么表示右括号比左括号的数量要多自然不能匹配;如果出栈的字符和当前的右括号不等,也表示不能匹配成功。
最后判断栈是否为空,为空表示刚好匹配,不为空表示左括号比右括号多。具体代码实现如下:
package cn.cqupt.leetcode.string;
import ja