给定一个只包括 '('
,')'
,'{'
,'}'
,'['
,']'
的字符串 s
,判断字符串是否有效。
示例 1:
输入:s = "()[]{}" 输出:true
示例 2:
输入:s = "([)]" 输出:false
用一个map维护括号的对应关系,右括号为key,左括号为value
实现一个栈,用来存左括号,遍历字符串,如果是右括号,判断栈顶的 左括号和和当前括号是否匹配,如果是左括号,放入栈中
class Solution {
public boolean isValid(String s) {
int len = s.length();
if(len%2 == 1 || len == 0){
return false;
}
//用一个map维护括号的对应关系
Map<Character,Character> map = new HashMap<>();
map.put(')','(');
map.put(']','[');
map.put('}','{');
//实现一个栈,用来存左括号
Deque<Character> stack = new LinkedList<>();
for(int i=0;i<len;i++){
char ch = s.charAt(i);
//如果是右括号,判断栈顶的 左括号和和当前括号是否匹配
if(map.containsKey(ch)){
if(stack.isEmpty() || stack.getFirst() != map.get(ch)){
return false;
}
stack.pop();
}else{
stack.push(ch);
}
}
return stack.isEmpty();
}
}