面向小白的力扣20. 有效的括号

124 阅读2分钟

一起养成写作习惯!这是我参与「掘金日新计划 · 4 月更文挑战」的第12天,点击查看活动详情

一起来学点算法,这里是慢慢学算法,我是小coder,昨天我们学习了环形;链表,今天我们来玩一下有趣的括号,这是力扣的20题,一道简单题,我们来实现一下。

题目描述

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

有效字符串需满足:

左括号必须用相同类型的右括号闭合。 左括号必须以正确的顺序闭合。

image.png

题目分析

这个题目我们可以来分析一下,左括号和右括号成对出现,这个情况属于最近相关性问题,和最小栈的问题一样,我们只需要把左括号都放入栈中,如果碰到右括号说明左括号已经全部放入,栈顶的元素实际上就是与之匹配的括号,匹配出栈,不匹配返回false。

解题思路

确定操作对象:本题中,操作数组就1个s 确定操作条件:操作条件为符号匹配,匹配的上返回true,否则返回false。 确定操作过程:操作过程为:看栈顶元素是否匹配,匹配就弹栈,不匹配返回false,还要看是否超出边界。 确定结果返回:匹配返回true,不匹配返回false,栈剩余也返回false。

代码

class Solution {
public:
    bool isValid(string s) {
        for(char ch : s){
            if(ch=='('|| ch=='{'|| ch=='[') a.push(ch);
            else{
            if(a.empty()) return false;
            if(ch==')' && a.top()!='('){
                return false;
            }
            if(ch==']' && a.top()!='['){
                return false;
            }
            if(ch=='}' && a.top()!='{'){
                return false;
            }
                a.pop();
            
            }
        }
        return a.empty();
    }
  private :
  stack<char> a;
};

题目总结

本题是一个最近相关性问题,题目的解法就是找到它们之间的相关性,本题中的相关性是左右括号成对出现,这个可以帮助我们干什么呢?检查代码中的括号。