本文仅是对力扣官方答案每段代码与方法解释,仅供学习参考
给定一个只包括 '(',')','{','}','[',']' 的字符串 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)
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。