【leetcode hot 100 20】有效的括号

解法一:使用栈

java 复制代码
class Solution {
    public boolean isValid(String s) {
        int n = s.length();
        if(n%2!=0){
            return false;
        }

        // 定义map,便于查找对应的括号
        Map<Character, Character> map = new HashMap<>();
        map.put(')','(');
        map.put(']','[');
        map.put('}','{');

        // 利用栈帮助判断
        Deque<Character> stack = new LinkedList<>();
        for(int i=0; i<n; i++){
            char ch = s.charAt(i);
            if(map.containsKey(ch)){
                // 是左括号
                if(stack.isEmpty() || stack.peek() != map.get(ch)){
                    return false;
                }
                stack.pop();
            }else{
                stack.push(ch);
            }
        }
        return stack.isEmpty();
    }
}

注意:

  • map不能LinkedMap,只能HashMap
    • List的实现:ArrayListLinkedListVector
    • Set的实现:HashSetLinkedHashSetTreeSet
    • Map的实现:HashMapLinkedHashMapTreeMap
    • Queue的实现:LinkedListArrayDequePriorityQueue
    • Stack的实现:LinkedListArrayDeque
  • 申请栈:
    - Deque<Character> stack = new LinkedList<>();
    • Deque<Character> stack = new ArrayDeque<>();
  • 申请队列:
    • Queue<Character> queue = new LinkedList<>();
    • Quque<Character> stack = new ArrayDeque<>();
  • LinkedListArrayDeque的区别:
    • 操作:
      ArrayDequeadd() remove()
      LinkedListoffer() poll() peek()
相关推荐
千金裘换酒6 小时前
LeetCode 移动零元素 快慢指针
算法·leetcode·职场和发展
28岁青春痘老男孩6 小时前
JDK8+SpringBoot2.x 升级 JDK 17 + Spring Boot 3.x
java·spring boot
方璧6 小时前
限流的算法
java·开发语言
元Y亨H6 小时前
Nacos - 服务注册
java·微服务
曲莫终7 小时前
Java VarHandle全面详解:从入门到精通
java·开发语言
一心赚狗粮的宇叔7 小时前
中级软件开发工程师2025年度总结
java·大数据·oracle·c#
正在学习前端的---小方同学7 小时前
Harbor部署教程
linux·运维
奋进的芋圆7 小时前
DataSyncManager 详解与 Spring Boot 迁移指南
java·spring boot·后端
计算机程序设计小李同学7 小时前
个人数据管理系统
java·vue.js·spring boot·后端·web安全
漫随流水7 小时前
leetcode算法(515.在每个树行中找最大值)
数据结构·算法·leetcode·二叉树