🚩传送门:牛客题目

题目

给出一个仅包含字符'(',')','{','}','['']的字符串,判断给出的字符串是否是合法的括号序列

示例1

输入:“[“ 返回值:false

解题思路:栈

遍历字符串,遇 ([{ 入栈,否则吐出栈顶元素与当前的字符进行匹配,不匹配返回false
当遍历字符串结束后,栈空说明匹配,否则说明不匹配。

复杂度分析

时间复杂度:[NC]52. 有效括号序列 - 图1,其中 [NC]52. 有效括号序列 - 图2 为字符串的长度 。

空间复杂度:[NC]52. 有效括号序列 - 图3,其中 [NC]52. 有效括号序列 - 图4 为字符串的长度,最差情况所有字符全部入栈 。

官方代码

  1. public class Solution {
  2. public boolean isValid (String s) {
  3. Stack 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. else{
  10. // 说明此时是 ) 或 } 或 ]
  11. // 栈空说明不匹配
  12. if(stack.empty())return false;
  13. char c=(char)stack.pop();
  14. if(s.charAt(i)==']'){
  15. if(c!='[')return false;
  16. }
  17. else if(s.charAt(i)==')'){
  18. if(c!='(')return false;
  19. }else if(s.charAt(i)=='}'){
  20. if(c!='{')return false;
  21. }else
  22. return false;
  23. }
  24. }
  25. // 字符串遍历完成后,栈空说明匹配成功,否则失败
  26. if(stack.empty())return true;
  27. return false;
  28. }
  29. }