0
点赞
收藏
分享

微信扫一扫

leetcode 20 有效的括号

想溜了的蜗牛 2022-01-12 阅读 104

题目:给定一个只包括 ‘(’,’)’,’{’,’}’,’[’,’]’ 的字符串 s ,判断字符串是否有效。

有效字符串需满足:

  1. 左括号必须用相同类型的右括号闭合。
  2. 左括号必须以正确的顺序闭合。

示例 1:

输入:s = "()"
输出:true

示例 2:

输入:s = "()[]{}"
输出:true

示例 3:

输入:s = "(]"
输出:false

示例 4:

输入:s = "([)]"
输出:false

示例 5:

输入:s = "{[]}"
输出:true

题目的要求是满足先进后出,使用栈来模拟

  1. 如果字符串的长度为奇数,我们可以直接返回 False
  2. 如果遇到左括号是加入栈中。如果遇到右括号,则与栈顶元素进行比较,若可以对应则表示符合,并且将栈顶元素出栈。
  3. 当字符串遍历结束时,判断栈是否为空,如果栈不为空,返回false。

java代码实现

class Solution {
    public boolean isValid(String s) {
        //首先判断字符串长度,如果是奇数,直接返回false
        int n = s.length();
        if (n % 2 == 1)
        {
            return false;
        }
        //构建哈希表
        Map<Character, Character> maps = new HashMap<Character, Character>(){{
            put(')', '(');
            put(']', '[');
            put('}', '{');
        }};
        //使用双端队列,构建一个栈
        Deque<Character> stack = new LinkedList<Character>();
        for (int i = 0; i < n; ++i)
        {
            //获取指定位置的字符
            char ch = s.charAt(i);
            //如果哈希表中存在右括号
            if (maps.containsKey(ch))
            {
                //如果第一个就是右括号(栈为空),或者,栈顶元素和左括号不匹配
                if (stack.isEmpty() || stack.peek() != maps.get(ch)){
                    return false;
                }
                stack.pop();
            }
            else
            {
                stack.push(ch);
            }
        } 
        return stack.isEmpty();
    }
}
举报

相关推荐

0 条评论