Leetcode: 20 无效的括号
关键点:
遍历到左括号"{","[","("时,入栈;遍历到右括号"}","]",")"时,判断栈顶是否为相应的左括号,如果是,则将栈顶元素出栈,如果不是或栈为空,则返回false。遍历字符完之后还要判断栈是否为空,目标是避免只有左括号,如“[[,{[”,如栈为空,则返回true,否则返回false。代码如下:
class Solution { Stack<Character> st = new Stack<Character>(); HashMap<Character,Character> map = new HashMap<Character,Character>(); public boolean isValid(String s) { //留神: '}':'{',而不是'{':'}' map.put('}','{'); map.put(')','('); map.put(']','['); for(char ch:s.toCharArray()){ if(map.containsKey(ch)){ if(!st.isEmpty() && st.peek() == map.get(ch)) st.pop(); else return false; } else st.push(ch); } //避免只有左括号,如”[[,{[” return st.isEmpty(); }}