LeetCode第20题有效的括号

继续打卡算法题,今天学习的是LeetCode的第20题有效的括号,这道题目是道中等题。算法题的一些解题思路和技巧真的非常巧妙,每天看一看算法题和解题思路,我相信对我们的编码思维和编码能力有一些帮助。

分析一波题目

这个题目需要判断括号是有效果的,有效括号有一个特征非常重要, 那就是遇到了右边的括号,一定存在左边匹配的括号。

比如[()], 遇到)的时候,最近的一个一定存在(,最近的也是最近最后遍历到的括号,我们可以使用栈结构来表达这种数据。

编码解决

java 复制代码
class Solution {
    public boolean isValid(String s) {
        int n = s.length();
        //存储关系
        Map<Character, Character> map = 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 (map.containsKey(ch)) {
                //是否栈顶有匹配的左边括号
                if (stack.isEmpty() || stack.peek() != map.get(ch)) {
                    return false;
                }
                stack.pop();
            } else {
                //左边的括号,入栈
                stack.push(ch);
            }
        }
        return stack.isEmpty();
    }
}

总结

栈的先进后出结构可以解决一些有规律的符号匹配的问题,使用起来非常巧妙。

相关推荐
tang&9 分钟前
滑动窗口:双指针的优雅舞步,征服连续区间问题的利器
数据结构·算法·哈希算法·滑动窗口
liang_jy10 分钟前
Android LaunchMode
android·面试
拼命鼠鼠13 分钟前
【算法】矩阵链乘法的动态规划算法
算法·矩阵·动态规划
LYFlied29 分钟前
【每日算法】LeetCode 17. 电话号码的字母组合
前端·算法·leetcode·面试·职场和发展
式5161 小时前
线性代数(八)非齐次方程组的解的结构
线性代数·算法·机器学习
Victor3562 小时前
Netty(20)如何实现基于Netty的WebSocket服务器?
后端
缘不易2 小时前
Springboot 整合JustAuth实现gitee授权登录
spring boot·后端·gitee
橘颂TA2 小时前
【剑斩OFFER】算法的暴力美学——翻转对
算法·排序算法·结构与算法
叠叠乐2 小时前
robot_state_publisher 参数
java·前端·算法
Kiri霧2 小时前
Range循环和切片
前端·后端·学习·golang