力扣第20题 有效的括号 栈方法

本文仅是对力扣官方答案每段代码与方法解释,仅供学习参考

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

有效字符串需满足:

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

示例 1:

输入:s = "()"
输出:true

示例 2:

输入:s = "()[]{}"
输出:true

示例 3:

输入:s = "(]"
输出:false

示例 4:

输入:s = "([)]"
输出:false

示例 5:

输入:s = "{[]}"
输出:true

提示:

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

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/valid-parentheses
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

char pairs(char a) {
    if (a == '}') return '{';
    if (a == ']') return '[';
    if (a == ')') return '(';
    return 0;
}
//先对配对进行说明,左括号应该对
//应相符
//合的右括号

bool isValid(char* s) {
    int n = strlen(s);
//提取字符串
//的长度n并定
//义为整型变量n
    if (n % 2 == 1) {
        return false;
    }
//如果利用取余除2正好等于1的
//话代表括号是奇数个,最终不
//可能配对,故直接false
    int stk[n + 1], top = 0;
//定义整型数组stk[n+1]
//这是一个栈,栈顶即
//表尾top=0,而n+1是
//为了在读取数据时由于有栈顶指针故
应当是多读一位,考虑了多1的存在
  for (int i = 0; i < n; i++) {
      char ch = pairs(s[i]);
//遍历字符串数组进行匹配
      if (ch) {
//如果ch不为0,代表还有需要匹配的
 if (top == 0 || stk[top - 1] != ch) {
    return false;
      }
//如果top==0即没有可以匹配的或
//者有但不匹配都false
            top--;
//如果没有执行if
//语句则有匹配那么
//出栈并减少栈中括号数
        } else {
            stk[top++] = s[i];
        }
//这里指入栈
    }
    return top == 0;
//只有当栈没有
//字符时才能返回0
}


作者:LeetCode-Solution
链接:https://leetcode-cn.com/problems/valid-parentheses/solution/you-xiao-de-gua-hao-by-leetcode-solution/
来源:力扣(LeetCode)
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

おすすめ

転載: blog.csdn.net/m0_62376035/article/details/121317434