【Leetcode】20.Valid Parentheses 有效的括号

题目地址:https://leetcode.cn/problems/valid-parentheses/

题目描述(英文)

Given a string s containing just the characters ‘(’, ‘)’, ‘{’, ‘}’, ‘[’ and ‘]’, determine if the input string is valid.

An input string is valid if:

1.Open brackets must be closed by the same type of brackets.
2.Open brackets must be closed in the correct order.
3.Every close bracket has a corresponding open bracket of the same type

题目描述(中文)

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

有效字符串需满足:

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

实例

示例 1:

输入:s = “()”
输出:true

示例 2:

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

示例 3:

输入:s = “(]”
输出:false

提示:

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

解题方法

方法:栈

语言Java

**解题思路:**遍历输入的字符串,遇到左括号将与其对应的右括号入栈,然后开始逐项匹配。不匹配的几种情况:①左括号多余,没有发现与左括号匹配的右括号②括号的类型匹配不了,如{]③右括号多余
于是具体判定方式:遇到左括号将与其对应的右括号入栈。继续判断,若栈空或者栈顶元素与当前项不匹配,则括号不匹配。都不是的话,将栈顶元素出栈,继续循环判断。

class Solution {
    public boolean isValid(String s) {
        Deque<Character> deque = new LinkedList<>();
        char ch;
        for(int i = 0; i < s.length(); i++){
            ch = s.charAt(i);
            //碰到左括号将与其对应的右括号入栈
            if(ch == '(') {
                deque.push(')');
            }else if(ch == '{'){
                deque.push('}');
            }else if(ch == '['){
                deque.push(']');
            }else if(deque.isEmpty() || deque.peek() != ch){
                return false;
            }else{  //最后栈顶元素与右括号匹配即,将栈顶元素出栈
                deque.pop();
            }
        }
        //最后判断栈中元素是否匹配
        return deque.isEmpty();
    }
}

总结:

Deque 继承了 Queue 接口,它主要由三种用途:双端队列、栈、普通队列。
Deque 作为堆栈只需要记住三个方法就可以了:
push(e)、pop()、peek()。
peek():获取但不移除此队列的头;如果此队列为空,则返回 null。

日期:

2022年12月3日

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值