在这之间注意比较当栈内没有元素了,而字符串还有待匹配的字符,输出false,当栈内还有元素,外面与之匹配测试的右半边括号,也输出false。

ts实现

  1. function isValid(s: string): boolean {
  2. let stack: Array<string> = []
  3. for (let i of s) {
  4. if (['(', '[', '{'].includes(i)) {
  5. stack.push(i)
  6. } else {
  7. switch (i) {
  8. case ')':
  9. if (stack[stack.length - 1] === '(') {
  10. stack.pop()
  11. } else {
  12. return false
  13. }
  14. break
  15. case ']':
  16. if (stack[stack.length - 1] === '[') {
  17. stack.pop()
  18. } else {
  19. return false
  20. }
  21. break
  22. case '}':
  23. if (stack[stack.length - 1] === '{') {
  24. stack.pop()
  25. } else {
  26. return false
  27. }
  28. break
  29. }
  30. }
  31. }
  32. return stack.length ? false : true
  33. }

之前的java代码实现

栈实现

  1. class Solution {
  2. public boolean isValid(String s) {
  3. Stack<Character> stack = new Stack<>();
  4. int len = s.length();
  5. for (int i=0;i<len;i++) {
  6. char c = s.charAt(i);
  7. if (c == '(' || c == '[' || c == '{') {
  8. stack.push(c);
  9. } else {
  10. if (stack.isEmpty()) return false;
  11. char left = stack.pop();
  12. if (left == '(' && c !=')') return false;
  13. if (left == '[' && c !=']') return false;
  14. if (left == '{' && c !='}') return false;
  15. }
  16. }
  17. return stack.isEmpty();
  18. }
  19. }
  1. class Solution {
  2. public boolean isValid(String s) {
  3. Stack<Character> stack = new Stack<>();
  4. for (int i = 0; i< s.length();i++){
  5. if (s.charAt(0) == ')' || s.charAt(0) == ']' || s.charAt(0) == '}'){
  6. return false;
  7. }
  8. if (s.charAt(i) == '(' || s.charAt(i) == '[' || s.charAt(i) == '{'){
  9. stack.push(s.charAt(i));
  10. }
  11. if (s.charAt(i) == ')' || s.charAt(i) == ']' || s.charAt(i) == '}'){
  12. if (s.charAt(i) == ')'){
  13. if (stack.isEmpty() == true) {
  14. return false;
  15. }
  16. if (stack.pop() != '(')
  17. return false;
  18. }
  19. if (s.charAt(i) == ']'){
  20. if (stack.isEmpty() == true) {
  21. return false;
  22. }
  23. if (stack.pop() != '[')
  24. return false;
  25. }
  26. if (s.charAt(i) == '}'){
  27. if (stack.isEmpty() == true) {
  28. return false;
  29. }
  30. if (stack.pop() != '{')
  31. return false;
  32. }
  33. }
  34. }
  35. if (stack.isEmpty() == true){
  36. return true;
  37. } else {
  38. return false;
  39. }
  40. }
  41. }

HashMap实现

  1. class Solution {
  2. private static HashMap<Character, Character> map = new HashMap<>();
  3. static {
  4. // key - value
  5. map.put('(', ')');
  6. map.put('{', '}');
  7. map.put('[', ']');
  8. }
  9. public boolean isValid(String s) {
  10. Stack<Character> stack = new Stack<>();
  11. int len = s.length();
  12. for (int i = 0; i < len; i++) {
  13. char c = s.charAt(i);
  14. if (map.containsKey(c)) { // 左括号
  15. stack.push(c);
  16. } else { // 右括号
  17. if (stack.isEmpty()) return false;
  18. if (c != map.get(stack.pop())) return false;
  19. }
  20. }
  21. return stack.isEmpty();
  22. }
  23. }