题意:

image.png

解题思路:

  1. 思路:
  2. 1. 遇到左括号就压栈
  3. 2. 遇到右括号,就弹出栈顶元素与当前元素对应的值是不是相等
  4. 3. 最后判断栈是否为空,空则为true,反之false

PHP代码实现:

  1. class Solution {
  2. function isValid($s) {
  3. $data = [')' => '(', '}' => '{', ']' => '['];
  4. $stack = new SplStack;
  5. for ($i = 0; $i < strlen($s); $i++) {
  6. if (isset($data[$s[$i]])) {
  7. if ($stack->isEmpty()) return false;
  8. $ele = $stack->pop();
  9. if ($ele != $data[$s[$i]]) {
  10. return false;
  11. }
  12. } else {
  13. $stack->push($s[$i]);
  14. }
  15. }
  16. if (!$stack->isEmpty()) return false;
  17. return true;
  18. }
  19. function isValidArr($s) {
  20. if (!$s) return true;
  21. $data = [')' => '(', '}' => '{', ']' => '['];
  22. $stack = [];
  23. for ($i = 0; $i < strlen($s); $i++) {
  24. if (isset($data[$s[$i]])) {
  25. if (empty($stack)) return false;
  26. $ele = array_pop($stack);
  27. if ($data[$s[$i]] != $ele) {
  28. return false;
  29. }
  30. } else {
  31. array_push($stack, $s[$i]);
  32. }
  33. }
  34. if (!empty($stack)) return false;
  35. return true;
  36. }
  37. }

GO代码实现:

  1. func isValid(s string) bool {
  2. hash := map[byte]byte{')':'(', ']':'[', '}':'{'}
  3. stack := make([]byte, 0)
  4. if s == "" {
  5. return true
  6. }
  7. for i := 0; i < len(s); i++ {
  8. if s[i] == '(' || s[i] == '[' || s[i] == '{' {
  9. stack = append(stack, s[i])
  10. } else if len(stack) > 0 && stack[len(stack) - 1] == hash[s[i]] {
  11. stack = stack[:len(stack) - 1]
  12. } else {
  13. return false
  14. }
  15. }
  16. return len(stack) == 0
  17. }