7.4 有效的括号

20 有效的括号

题目

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

有效字符串需满足:

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

示例 1:

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

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

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

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

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

提示:

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

来源:力扣(LeetCode)
链接: link.

思路

先将输入的左括号对应的右括号按顺序推进栈 st 里,然后再将输入的右括号与栈 st 里按出栈顺序一一比较.
若相同则说明匹配成功,从栈里删除该括号,这样输入完成后栈也清空了,字符串有效;
其他情况字符串无效 :
1.遍历中途,遇到这两种情况就可以做出无效判断(提前退出,因为继续下去也不可能有效) :
若 st 为空,说明右括号多了;若栈顶括号与输入右括号不同,说明不匹配;
2.遍历完了 :
若栈不为空,说明左括号多了

具体代码实现(C++)

class Solution {
public:
    bool isValid(string s) {
        stack<int> st;
        for (int i = 0; i < s.size(); i++) {
            if (s[i] == '(') 
                st.push(')');
            else if (s[i] == '{') 
                st.push('}');
            else if (s[i] == '[') 
                st.push(']');
            else if (st.empty() || st.top() != s[i]) //1.没遍历完就为空,说明右括号多了;2.左右括号不匹配
                return false;
            else
                st.pop();
        }
        //3.左括号多了 
        return st.empty();
    }
};

模型(知识点)

上一篇:spark的Scala基础语法教程二、运算符与分支语句(idea版本)


下一篇:Python流程控制