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();
}



相关文章
|
14天前
|
存储 算法 测试技术
力扣经典150题第五十四题:最小栈
力扣经典150题第五十四题:最小栈
15 0
|
17天前
|
存储 算法 索引
力扣每日一题 6/24 模拟 数组 单调栈
力扣每日一题 6/24 模拟 数组 单调栈
8 0
|
5天前
|
Python
155. 最小栈 力扣 python 空间换时间 o(1) 腾讯面试题
155. 最小栈 力扣 python 空间换时间 o(1) 腾讯面试题
|
1月前
|
存储 算法 Python
二刷力扣--栈和队列
二刷力扣--栈和队列
|
1月前
|
存储 算法 数据可视化
力扣155题最全解法:如何实现支持常数时间获取最小值的最小栈(附详细图解和复杂度分析)
力扣155题最全解法:如何实现支持常数时间获取最小值的最小栈(附详细图解和复杂度分析)
|
14天前
|
算法 测试技术
力扣经典150题第五十一题:有效的括号
力扣经典150题第五十一题:有效的括号
17 0
|
1月前
|
算法 Java C语言
【经典算法】LeetCode 20:有效的括号(Java/C/Python3实现含注释说明,Easy)
【经典算法】LeetCode 20:有效的括号(Java/C/Python3实现含注释说明,Easy)
17 1
|
1月前
|
容器
【LeetCode刷题】栈和队列题目练习~
【LeetCode刷题】栈和队列题目练习~
|
1月前
|
算法
【经典LeetCode算法题目专栏分类】【第11期】递归问题:字母大小写全排列、括号生成
【经典LeetCode算法题目专栏分类】【第11期】递归问题:字母大小写全排列、括号生成
|
1月前
|
算法
【经典LeetCode算法题目专栏分类】【第9期】深度优先搜索DFS与并查集:括号生成、岛屿问题、扫雷游戏
【经典LeetCode算法题目专栏分类】【第9期】深度优先搜索DFS与并查集:括号生成、岛屿问题、扫雷游戏