Leetcode 笔记 20. 有效的括号

Leetcode 笔记 20. 有效的括号

  • 题目描述
  • 思路
  • 代码
  • 注意

题目描述

题目连接

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

有效字符串需满足:

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

示例 1:

输入:s = “()”
输出:true
示例 2:

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

输入:s = “(]”
输出:false
示例 4:

输入:s = “([)]”
输出:false
示例 5:

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

提示:

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

思路

这个就是经典的stack题目,有效括号的本质,就是要在对应的层次,括号之间实现对应,如果没有括号对应或者在同一层次对应了不同的括号,则判定为无效括号。这与stack的进栈出栈的行为完全符合。

代码

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

注意

  1. 在进行stack的top提取之前,一定要判断empty情况,否则极其容易出现runtime error的情况。
  2. 注意特殊情况,即只有一个括号,这个非常阴间的特殊情况。

你可能感兴趣的:(LeetCode题解,leetcode,算法,职场和发展)