[每日算法 - 华为机试] leetcode20 :有效的括号 「栈」

文章介绍了如何使用栈解决力扣上的有效括号问题。通过遍历字符串,将左括号入栈,遇到右括号时检查栈顶的左括号是否匹配,匹配则出栈,最后栈为空则表示括号有效。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

入口

力扣icon-default.png?t=N5K3https://leetcode.cn/problems/valid-parentheses/submissions/

题目描述

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

有效字符串需满足:

左括号必须用相同类型的右括号闭合。
左括号必须以正确的顺序闭合。
每个右括号都有一个对应的相同类型的左括号。
 

示例 1:

 输入:s = "()"
 输出:true
示例 2:

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

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

方法一:栈

解题思路

  1. 遍历字符串 
  2. 将左括号入栈
  3. 如果是右字符串则进行判断
    1. stack是否为空 字符串全是右字符串的情况。
    2. 和最近的字符串匹配
  4. 匹配成功将左括号出栈
  5. 最后栈为空则代表符合规则

代码示例

class Solution {
    public boolean isValid(String s) {
        int n = s.length();
        if(n%2==1){return false;}
        Map<Character,Character> pairs = 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(pairs.containsKey(ch)){
                //前面没有左括号或者最近的左括号不匹配
                if(stack.isEmpty() || stack.peek() != pairs.get(ch)){
                    return false;
                }
                if(!stack.isEmpty())stack.pop();
            }else{
                stack.push(ch);
            }
            
        }
    return stack.isEmpty();

    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值