有效的括号
https://leetcode-cn.com/problems/valid-parentheses/submissions/
使用栈数据结构解决问题
bool isValid(char * s){
int len = strlen(s);
char *stack = (char *)calloc(sizeof(char), len>>1), t;
int top = 0;
for ( int i = 0; i < len; i++ ) {
//是左括弧,入栈
if (s[i] == '(') {
stack[top++] = ')';
} else if (s[i] == '{') {
stack[top++] = '}';
} else if (s[i] == '[') {
stack[top++] = ']';
} else if (top > 0 && s[i] == stack[top-1] ) { //栈不为空,可以匹配则出栈
top--;
} else if (top == 0 || (top > 0 && s[i] != stack[top-1])) { //不匹配 或 栈为空且且是右括弧
return false;
}
}
if ( top == 0 ) {
return true;
}
return false;
}
<?php
class Solution {
private $map = [
'(' => ')',
'[' => ']',
'{' => '}',
];
function isValid($s) {
$len = strlen($s);
$stack = [];
for ($i = 0; $i < $len; $i++ ) {
if ( array_key_exists($s[$i], $this->map) ) { // 左括弧入栈
array_push($stack, $this->map[$s[$i]]);
} else {
if ( !empty($stack) ) { //非空栈
if ( end($stack) == $s[$i] ) { //栈顶元素等于右括弧,出栈
array_pop($stack);
} else { //左元素不等与之匹配的右括弧,停止
return false;
}
} else { //为空时,直接来了右括弧,停止
return false;
}
}
}
return empty($stack) ? true : false;
}
}
$a = new Solution();
var_dump($a->isValid('')); //栈为空, return true
var_dump($a->isValid('(((')); //栈不为空, return false
var_dump($a->isValid('))')); //栈为空,都没有入栈,return false
var_dump($a->isValid('(()')); //栈不为空,return false
var_dump($a->isValid('(]'));//栈不为空,return false
var_dump($a->isValid('()()()[]{}')); //栈为空,return true