20. 有效的括号
给定一个只包括 ‘(’,’)’,’{’,’}’,’[’,’]’ 的字符串,判断字符串是否有效。
有效字符串需满足:
左括号必须用相同类型的右括号闭合。
左括号必须以正确的顺序闭合。
注意空字符串可被认为是有效字符串。
示例 1:
输入: “()”
输出: true
示例 2:
输入: “()[]{}”
输出: true
示例 3:
输入: “(]”
输出: false
示例 4:
输入: “([)]”
输出: false
示例 5:
输入: “{[]}”
输出: true
这道题不可以使用计数器,如果是()[],当然两种不同的计数器,如果最后为0就return true
–
但是如果是([)]也会return true,所以应该用栈来做,因为对于各种括号,最里面的括号必然配对,消去之后,外面的括号也会配对的,就想消消乐一样。所以最后栈空,如果不空,就说明不对
class Solution {
private HashMap<Character,Character>mappings;
public Solution(){
this.mappings=new HashMap<Character,Character>();
this.mappings.put(')','(');
this.mappings.put(']','[');
this.mappings.put('}','{');
}
public boolean isValid(String s) {
Stack<Character>stack=new Stack<Character>();
for(int i=0;i<s.length();i++){
char c=s.charAt(i);
if(this.mappings.containsKey(c)){
char toElement=stack.empty()?'#':stack.pop();
if(toElement!=this.mappings.get(c)){
return false;
}
}
else{
stack.push(c);
}
}
return stack.empty();
}
}