利用栈判断有效的括号

 1 package com.wing.mall.cloud.account.modular.mq;
 2 
 3 import java.util.HashMap;
 4 import java.util.LinkedList;
 5 import java.util.Map;
 6 
 7 public class Solution {
 8     private static final Map<Character,Character> map = new HashMap<Character,Character>(){{
 9         put('{','}'); put('[',']'); put('(',')'); put('?','?');
10     }};
11 
12     public static boolean isValid(String s) {
13         if (s.length() > 0 && !map.containsKey(s.charAt(0)))  return false;
14         LinkedList<Character> stack = new LinkedList<Character>() {{ add('?'); }};
15         for (Character c : s.toCharArray()) {
16             if(map.containsKey(c)) stack.addLast(c);
17             else if(map.get(stack.removeLast()) != c) return false;
18         }
19         return stack.size() ==1;
20     }
21 
22     public static void main(String[] args) {
23         String s = "{[]}";
24         boolean valid = isValid(s);
25         System.out.println(valid);
26     }
27 
28 }

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

有效字符串需满足:

左括号必须用相同类型的右括号闭合。
左括号必须以正确的顺序闭合。
注意空字符串可被认为是有效字符串。

示例 1:

输入: "()"
输出: true
示例 2:

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

输入: "(]"
输出: false
示例 4:

输入: "([)]"
输出: false
示例 5:

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

posted @ 2020-07-06 09:05  陆伟  阅读(344)  评论(0编辑  收藏  举报