zoukankan      html  css  js  c++  java
  • 领扣(LeetCode)有效的括号 个人题解

    给定一个只包括 '('')''{''}''['']' 的字符串,判断字符串是否有效。

    有效字符串需满足:

    1. 左括号必须用相同类型的右括号闭合。
    2. 左括号必须以正确的顺序闭合。

    注意空字符串可被认为是有效字符串。

    示例 1:

    输入: "()"
    输出: true
    

    示例 2:

    输入: "()[]{}"
    输出: true
    

    示例 3:

    输入: "(]"
    输出: false
    

    示例 4:

    输入: "([)]"
    输出: false
    

    示例 5:

    输入: "{[]}"
    输出: true


    这道题的思路比较简单,使用栈存放左括号,一旦遇到右括号就弹出栈顶元素进行判断是否配对,如果不是直接返回false。遍历字符串完毕后看栈内是否还有元素,如果有则为false,如果没有为true

    做个长度是否为偶数的特判可以提高速度,也要注意如果遇到输入的字符串都是右括号的特殊情况,栈内没东西可以弹出的特判。

    代码如下:

     1 class Solution {
     2     public boolean isValid(String s) {
     3         Stack<Character> stack = new Stack<>();
     4         if (s.length() % 2 != 0)
     5             return false;
     6         for (int i = 0; i < s.length(); i++) {
     7             if (s.charAt(i) == '(' || s.charAt(i) == '[' || s.charAt(i) == '{') {
     8                 stack.push(s.charAt(i));
     9             } else {
    10                 if (stack.isEmpty())
    11                     return false;
    12                 char tmp = stack.pop();
    13                 if (tmp == '(' && s.charAt(i) == ')')
    14                     continue;
    15                 else if (tmp == '[' && s.charAt(i) == ']')
    16                     continue;
    17                 else if (tmp == '{' && s.charAt(i) == '}')
    18                     continue;
    19                 else
    20                     return false;
    21             }
    22 
    23         }
    24         if (stack.isEmpty())
    25             return true;
    26         else
    27             return false;
    28     }
    29 }
  • 相关阅读:
    win7下iis中配置php.ini文件
    editplus快捷键大全
    树和二叉树的存储结构的实现(C/C++实现)
    CTF---编程入门第一题 循环
    CTF---Web入门第九题 FALSE
    CTF---Web入门第八题 Guess Next Session
    CTF---Web入门第七题 猫抓老鼠
    CTF---Web入门第六题 因缺思汀的绕过
    CTF---Web入门第五题 貌似有点难
    CTF---Web入门第四题 Forms
  • 原文地址:https://www.cnblogs.com/axiangcoding/p/9972475.html
Copyright © 2011-2022 走看看