LeetCode 20.有效的括号
只有一种括号情况下:
1.在任意一个位置上,左括号数量 >= 右括号数量
2.在最后一个位置上,左括号数量 == 右括号数量
3.程序中只需要记录左括号数量和右括号数量即可
bool isValid(char * s){
int32_t lnum = 0, rnum = 0;
int32_t len = strlen(s);
for(int32_t i = 0; i < len; i++){
switch(s[i]){
case'(': ++lnum;break;
case')': ++rnum;break;
defaulf: return false;
}
if(lnum >= rnum) continue;
return false;
}
return lnum == rnum;
}
题解:
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;
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;
}