领扣(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 }

 

posted @ 2018-11-17 00:03  AXiangCoding  阅读(266)  评论(0编辑  收藏  举报