leetcode20——有效的括号——java实现

题目要求:
leetcode20——有效的括号——java实现_第1张图片

分析:
有一种优美的数据结构,叫栈(stack),这道题就是用这种美丽的数据结构来解决的。

拿到题目之后,我们需要先对题目进行分析。

先看第一个要求:
在这里插入图片描述
这个操作简单,我们可以直接利用计数来解决,设置三种不同的计数器,当遇到’(’, ‘[’, '{'时就令其各自的计数器+1,然后遇到它们的另一半时令计数器-1,到最后的时候看看计数器的值是不是0就OK了。

但是题目是永远不会这么简单滴~它给出了第二个要求:
在这里插入图片描述
需要按照正确的顺序闭合,意思就是,就算你左半边跟右半边的个数相等,如果你随便排,照样要返回false。如:) ( ] } { [,这里左半边右半边个数都相等,但是它就不是有效括号。

为了解决这个问题,我们就要使用先进后出的栈
具体思路为:

  1. 将这个字符串中的每一个字符进行遍历,一旦遇到左半边的括号’(’, ‘[’, ‘{’,就将它们入栈;
  2. 在遍历的过程中,如果遇到右半边的括号’)’, ‘]’, ‘}’,则将它们与栈顶的括号进行匹配,如果能匹配得上,则继续遍历后面的,如果匹配不上,就直接不用做了,返回false就好了;
  3. 当遍历完整个字符串中的字符后,如果这个栈已经变成空栈了,证明所有的括号都已经匹配成功,说明是有效括号。

具体代码如下:

class Solution {
public static boolean isValid(String s) {
  Stack stack = new Stack<>();
        for(char c : s.toCharArray()) {
            switch(c) {
                case ')':
                    if(stack.isEmpty() || stack.pop() != '(')
                        return false;
                    break;
                case '}':
                    if(stack.isEmpty() || stack.pop() != '{')
                        return false;
                    break;
                case ']':
                    if(stack.isEmpty() || stack.pop() != '[')
                        return false;
                    break;
                default:
                    stack.push(c);
                    break;
            }
        }
    return stack.isEmpty();
    }
}

你可能感兴趣的:(leecode)