【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()
相关推荐
刘景贤20 分钟前
04_Linux驱动_06_GPIO子系统总结
linux·运维·服务器
IT缺脑干1 小时前
Linux centos 7 vsftp本地部署脚本
linux·运维·centos
一拳一个呆瓜2 小时前
【银河麒麟系统常识】命令:dotnet --list-sdks(列出已安装的 .NET SDK 版本)
linux·.net·kylin
一拳一个呆瓜2 小时前
【银河麒麟系统常识】需求:安装.NET SDK
linux·.net·kylin
她说彩礼65万5 小时前
WPF Binding方式详解
java·开发语言·wpf
Gold Steps.5 小时前
运维网络排查工具介绍与使用
linux·运维·网络
IT大卡拉咪7 小时前
Linux网站搭建(新手必看)
linux·运维·服务器
YX1417 小时前
在linux部署网站
linux·运维·服务器
天航星7 小时前
VSCode Java 单元测试没有运行按钮
java·vscode·单元测试
盖世英雄酱581368 小时前
编程 5 年之惑,AI 给出完美答案
java