渣渣兔 发表于 2025-1-21 00:56:21

力扣 有效的括号

括号匹配题目,找到符合的举行抵消。
题目
https://i-blog.csdnimg.cn/direct/43152254a6cb48ae8d4a002e3815bf04.jpeg
从题可以看出是嵌套的括号先匹配先做抵消,类似就近原则,这也是栈的典型例题。可以通过摆列多种差别的情况渐渐用if与else做返回。
时间复杂度:O(n),其中 n 是字符串的长度。空间复杂度:O(n),重要来自栈的空间。
class Solution {
   public boolean isValid(String s) {
      Stack<Character> stack = new Stack<>();
      char[] charArray = s.toCharArray();

      for (char ch : charArray) {
            //如果是左括号则直接入栈
            if (ch == '(' || ch == '{' || ch == '[') {
                stack.push(ch);
            } else {
               //如果是右括号,并且此时栈不为空
                if (!stack.isEmpty()) {
                  if (ch == ')') {
                        if (stack.pop() != '(')
                            return false;
                  } else if (ch == '}') {
                        if (stack.pop() != '{')
                            return false;
                  } else {
                        if (stack.pop() != '[')
                            return false;
                  }
                }
                else{
                  return false;
                }
            }
      }
      return stack.isEmpty();
    }
} 通过遍历字符串的字符,把左括号入栈,反面加进的在栈顶,再对右括号出栈看是否可以或许匹配,不匹配就阐明无效,最后还要对栈判空,有可能最后栈还有括号阐明有多的没有匹配到也是不符合的。固然,也可以写简洁一些。
class Solution {
    public boolean isValid(String s) {
      if(s.isEmpty())
            return true;
      Stack<Character> stack=new Stack<Character>();
      for(char c:s.toCharArray()){
            if(c=='(')
                stack.push(')');
            else if(c=='{')
                stack.push('}');
            else if(c=='[')
                stack.push(']');
            else if(stack.isEmpty()||c!=stack.pop())
                return false;
      }
      return stack.isEmpty();
    }
}  


免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
页: [1]
查看完整版本: 力扣 有效的括号