image.png
image.png

解决思路

image.png
使用一个栈作为辅助的空间
image.png
一旦遇到左方向的括号,就入栈。
image.png
一旦遇到右方向的括号
image.png
就出栈一个元素,看与当前的元素是否匹配
一直到字符串的末尾,到了末尾的时候判断栈中是否为空
image.png
对于弹出元素不匹配的情况,直接返回false
image.png

  1. public boolean isValid(String s) {
  2. //使用栈这个数据结构
  3. Stack<Character> stack = new Stack<>();
  4. //遍历
  5. for(int i=0;i<s.length();i++){
  6. //左括号入栈
  7. if(s.charAt(i)=='['||s.charAt(i)=='{'||s.charAt(i)=='(')
  8. stack.push(s.charAt(i));
  9. //右括号则出栈一个元素 判断是否匹配
  10. else{
  11. //如果栈空 直接返回false
  12. if(stack.isEmpty())
  13. return false;
  14. char c = stack.pop();
  15. char match;
  16. //判断应该match的字符
  17. switch(s.charAt(i)){
  18. case ']': match = '[';break;
  19. case '}': match = '{';break;
  20. default:match = '(';
  21. }
  22. //如果不匹配直接返回false
  23. if(match != c)
  24. return false;
  25. }
  26. }
  27. //如果此时栈中还有元素 报错
  28. if(stack.isEmpty())
  29. return true;
  30. return false;
  31. }