题意:
解题思路:
思路:
1. 遇到左括号就压栈
2. 遇到右括号,就弹出栈顶元素与当前元素对应的值是不是相等
3. 最后判断栈是否为空,空则为true,反之false
PHP代码实现:
class Solution {
function isValid($s) {
$data = [')' => '(', '}' => '{', ']' => '['];
$stack = new SplStack;
for ($i = 0; $i < strlen($s); $i++) {
if (isset($data[$s[$i]])) {
if ($stack->isEmpty()) return false;
$ele = $stack->pop();
if ($ele != $data[$s[$i]]) {
return false;
}
} else {
$stack->push($s[$i]);
}
}
if (!$stack->isEmpty()) return false;
return true;
}
function isValidArr($s) {
if (!$s) return true;
$data = [')' => '(', '}' => '{', ']' => '['];
$stack = [];
for ($i = 0; $i < strlen($s); $i++) {
if (isset($data[$s[$i]])) {
if (empty($stack)) return false;
$ele = array_pop($stack);
if ($data[$s[$i]] != $ele) {
return false;
}
} else {
array_push($stack, $s[$i]);
}
}
if (!empty($stack)) return false;
return true;
}
}
GO代码实现:
func isValid(s string) bool {
hash := map[byte]byte{')':'(', ']':'[', '}':'{'}
stack := make([]byte, 0)
if s == "" {
return true
}
for i := 0; i < len(s); i++ {
if s[i] == '(' || s[i] == '[' || s[i] == '{' {
stack = append(stack, s[i])
} else if len(stack) > 0 && stack[len(stack) - 1] == hash[s[i]] {
stack = stack[:len(stack) - 1]
} else {
return false
}
}
return len(stack) == 0
}