leetcode【栈与队列—简单】 20. 有效的括号

简介: leetcode【栈与队列—简单】 20. 有效的括号

题目


题目来源leetcode


leetcode地址:20. 有效的括号,难度:简单。


题目描述(摘自leetcode):


给定一个只包括 '(',')','{','}','[',']' 的字符串 s ,判断字符串是否有效。
有效字符串需满足:
左括号必须用相同类型的右括号闭合。
左括号必须以正确的顺序闭合。
示例 1:
输入:s = "()"
输出:true
示例 2:
输入:s = "()[]{}"
输出:true
示例 3:
输入:s = "(]"
输出:false
示例 4:
输入:s = "([)]"
输出:false
示例 5:
输入:s = "{[]}"
输出:true
提示:
1 <= s.length <= 104
s 仅由括号 '()[]{}' 组成


本地调试代码:


class Solution {
    public int search(int[] nums, int target) {
        ....
    }
    public static void main(String[] args) {
        Solution solution = new Solution();
        int[] arr = new int[]{-1,0,3,5,9,12};//这里修改数组内容
        System.out.println(solution.search(arr, 2));//数组、目标值
    }
}


题解


NO1:栈解决


思路:若是左闭合符号就压入配对的右闭合符号,方便之后进行匹配。


示例:"()[{}]"   stack=[]
① 字符'(',压入')'  stack=['(']
② 字符')',与当前栈顶存放匹配,出栈  stack=[]
③ 字符'[',压入']'  stack=[']']
④ 字符'{',压入'}'  stack=[']','}']
⑤ 字符'}',与当前栈顶存放匹配,出栈 stack=[']']
⑥ 字符']',与当前栈顶存放匹配,出栈 stack=[]
所有字符都遍历一遍之后,判断栈中是否存在元素,为空表示有效括号;不为空表示无效括号。


代码:


public boolean isValid(String s) {
    Deque<Character> stack = new LinkedList<>();
    for (char c : s.toCharArray()) {
        //前面三个判断当匹配到左闭合时存储右闭合符号到栈,之后用来进行直接匹配
        if(c == '('){
            stack.push(')');
        }else if(c == '{'){
            stack.push('}');
        }else if(c == '['){
            stack.push(']');
        }else if(stack.isEmpty() || stack.peek() != c){ //若是栈为空或者对应匹配的不一致,直接判定不匹配
            return false;
        }else {
            stack.pop();
        }
    }
    //若是为空,表示全部匹配完了,若是没有空说明另外少了右闭合括括号
    return stack.isEmpty();
}



相关文章
|
13天前
|
存储 算法 Python
二刷力扣--栈和队列
二刷力扣--栈和队列
|
17天前
|
存储 算法 数据可视化
力扣155题最全解法:如何实现支持常数时间获取最小值的最小栈(附详细图解和复杂度分析)
力扣155题最全解法:如何实现支持常数时间获取最小值的最小栈(附详细图解和复杂度分析)
|
22天前
|
算法 Java C语言
【经典算法】LeetCode 20:有效的括号(Java/C/Python3实现含注释说明,Easy)
【经典算法】LeetCode 20:有效的括号(Java/C/Python3实现含注释说明,Easy)
14 1
|
14天前
|
容器
【LeetCode刷题】栈和队列题目练习~
【LeetCode刷题】栈和队列题目练习~
|
14天前
|
算法
【经典LeetCode算法题目专栏分类】【第11期】递归问题:字母大小写全排列、括号生成
【经典LeetCode算法题目专栏分类】【第11期】递归问题:字母大小写全排列、括号生成
|
14天前
|
算法
【经典LeetCode算法题目专栏分类】【第9期】深度优先搜索DFS与并查集:括号生成、岛屿问题、扫雷游戏
【经典LeetCode算法题目专栏分类】【第9期】深度优先搜索DFS与并查集:括号生成、岛屿问题、扫雷游戏
|
17天前
|
存储 SQL 算法
LeetCode题目100:递归、迭代、dfs使用栈多种算法图解相同的树
LeetCode题目100:递归、迭代、dfs使用栈多种算法图解相同的树
|
17天前
|
存储 SQL 算法
LeetCode 题目 94:五种算法递归|迭代|莫里斯|线索二叉树|栈的迭代二叉树 实现中序遍历
LeetCode 题目 94:五种算法递归|迭代|莫里斯|线索二叉树|栈的迭代二叉树 实现中序遍历
|
18天前
|
SQL 算法 数据可视化
LeetCode 题目 32:最长有效括号【python】
LeetCode 题目 32:最长有效括号【python】
|
18天前
|
存储 SQL 算法
LeetCode第22题:生成括号【22/1000 python 递归|动态规划】
LeetCode第22题:生成括号【22/1000 python 递归|动态规划】