引用官方例程加了自己的注释,理解着看
题目:给定一个只包括 ‘(’,’)’,’{’,’}’,’[’,’]’ 的字符串 s ,判断字符串是否有效。
有效字符串需满足:
左括号必须用相同类型的右括号闭合。
左括号必须以正确的顺序闭合。
示例 1:
输入:s = “()”
输出:true
示例 2:
输入:s = “()[]{}”
输出:true
示例 3:
输入:s = “(]”
输出:false
示例 4:
输入:s = “([)]”
输出:false
示例 5:
输入:s = “{[]}”
输出:true
代码:
char pairs(char a) {
if (a == '}') return '{';
if (a == ']') return '[';
if (a == ')') return '(';
return 0;
}
bool isValid(char* s) {
int n = strlen(s);
if (n % 2 == 1) { //单数字符一定有半个括号
return false;
}
int stk[n + 1], top = 0; //stk是栈
for (int i = 0; i < n; i++) {
char ch = pairs(s[i]); //函数作用:找出右括号对应的左括号
if (ch) { //如果是右括号
if (top == 0 || stk[top - 1] != ch) {//判断栈里的最后一个是不是对应的左括号
return false; //如果不是或者栈为空的时候出现了右括号
} //那么说明错了
top--; //匹配成功的话把栈顶的左括号移除
} else { // 如果是左括号
stk[top++] = s[i]; //左括号入栈
}
}
return top == 0; //全部匹配成功的时候栈空,所以返回是true,反之栈非空说明左括号有剩余
}
/*
作者:LeetCode-Solution
链接:https://leetcode-cn.com/problems/valid-parentheses/solution/you-xiao-de-gua-hao-by-leetcode-solution/
来源:力扣(LeetCode)
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。 */
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/valid-parentheses
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。