• 领扣(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 }
  • 相关阅读:
    查看linux cpu和内存利用率__linux - top命令
    Maven仓库管理Nexus(转帖后加强版)
    实现系统菜单的两种方式
    使用Iterator遍历数组
    Android自定义退出弹出框
    AsyncTask的学习
    Android中常用到的权限
    Java集合
    Android中以文件的形式保存数据
    Android仿微信的开机滑动界面
  • 原文地址:https://www.cnblogs.com/axiangcoding/p/9972475.html
Copyright © 2020-2023  润新知