leetcode第20题,有效的括号。采用栈来完成。

LeetCode 20有效的括号

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

有效字符串需满足:

  1. 左括号必须用相同类型的右括号闭合。
  2. 左括号必须以正确的顺序闭合。
  3. 每个右括号都有一个对应的相同类型的左括号。

示例 1:

1输入:s = "()"
2输出:true

示例 2:

1输入:s = "()[]{}"
2输出:true

示例 3:

1输入:s = "(]"
2输出:false

提示:

  • 1 <= s.length <= 104
  • s 仅由括号 '()[]{}' 组成

思路

这种先进后出的顺序,需要用到栈的数据结构

解题

 1class Solution {
 2    public boolean isValid(String s) {
 3        //LinkedList同时实现了List接口和Deque对口
 4        //也就是收它既可以看作一个顺序容器
 5        //又可以看作一个队列(Queue)
 6        //同时又可以看作一个栈(stack)
 7        Deque<Character> stack = new LinkedList<Character>();
 8        //java String中的单个字符的操作
 9        //String.toCharArray()把整个String转成 char[] 数组,然后就可以按着数组的方式处理
10        //使用String.charAt(i)函数,也可以实现字符串的处理。
11        for(char i : s.toCharArray())
12        {
13            if('(' == i)
14            {
15                stack.push(')');
16            }else if('[' == i)
17            {
18                stack.push(']');
19            }else if('{' == i)
20            {
21                stack.push('}');
22            }else if(stack.isEmpty() || stack.pop() != i)
23            {
24                return false;
25            }
26        }
27        return stack.isEmpty();
28        
29    }
30}