给定一个只包括 ‘(’,’)’,’{’,’}’,’[’,’]’ 的字符串 s ,判断字符串是否有效。
有效字符串需满足:
左括号必须用相同类型的右括号闭合。
左括号必须以正确的顺序闭合。
这个题目很明显是使用一个辅助栈来解决问题,遇到左括号压栈,右括号进行对比
主要是一个思想,使用hashmap把键值对存储起来,这样对比的时候,时间复杂度变成了O(1)
还有一个就是可以在Hashmap中保存一个??键值对,这样我们可以在第一次压入一个?,这样就可以避免越界的问题了。
class Solution {
private static final Map<Character,Character> map=new HashMap<>(){
{
put('{','}'); put('[',']'); put('(',')');
//使用这个来解决stack初始为0的时候的判断边界问题
// put('?','?');
}
};
public boolean isValid(String s) {
if(s.length()>0&&!map.containsKey(s.charAt(0)))
return false;
Stack<Character> stack=new Stack<>();
// stack.add('?');
for(Character c:s.toCharArray()){
if(map.containsKey(c)){
stack.add(c);
}else{
if(stack.size()==0)
return false;
if(map.get(stack.pop())!=c)
return false;
}
}
return stack.size()==0;
}
}