69.有效的括号

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

有效字符串需满足:

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

示例1:

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

示例2:

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

示例3:

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

示例4:

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

提示:

  • 1 <= s.length <= 104
  • s 仅由括号 '()[]{}' 组成

代码:

class Solution {
    public boolean isValid(String s) {
        //如果字符串长度为奇数,直接返回false,因为括号必须成对出现
        if(s.length()%2==1)return false;
        //使用双端队列作为栈结构来存储左括号
        Deque<Character>stack = new LinkedList<>();
        //创建映射关系:右括号 -> 对应的左括号
        Map<Character,Character>mp = new HashMap<>();
        mp.put(')', '(');
        mp.put(']', '[');
        mp.put('}', '{');
        //遍历字符串中的每个字符
        for(int i=0;i<s.length();i++){
            char c = s.charAt(i);
            //如果当前字符是右括号
            if(mp.containsKey(c)){
                //检查栈是否为空或者栈顶元素是否不匹配当前右括号对应的左括号
                if(stack.isEmpty()||stack.peek()!=mp.get(c))return false;//不匹配则直接返回false
                //匹配则弹出栈顶的左括号
                stack.pop();
            }else stack.push(c);//如果是左括号,压入栈中
        }
        //最后检查栈是否为空,为空说明所有括号都正确匹配
        return stack.isEmpty();
    }
}
posted @ 2025-05-06 13:11  回忆、少年  阅读(16)  评论(0)    收藏  举报