有效的括号
有效的括号
一、题目描述
给定一个只包括 '(',')','{','}','[',']' 的字符串 s ,判断字符串是否有效。
有效字符串需满足:
左括号必须用相同类型的右括号闭合。
左括号必须以正确的顺序闭合。
例如:
输入:s = "()"
输出:true
输入: s = "{()}"
输出:true
输入:"{})"
输出:false
二、题目分析
1,有效的括号是包含一对括号,一定是偶数个。2,字符串开始符号一定是左括号。3,这里括号存在一种顺序,同类型的括号一定是先左括号再有括号。
三、解题思路
1、括号数量是偶数个,如果出现奇数直接false。
2、创建Map集合,用于匹配括号。Key和Value分别表述不同类型括号的右括号和左括号。
3、循环遍历所给字符串,将左括号压进栈中,右括号进行匹配。
代码实现:
class Solution {
public boolean isValid(String s) {
if(s.length() % 2 == 1){
return false;
}
Map<Character,Character> map = new HashMap<Character,Character>();
map.put(')','(');
map.put('}','{');
map.put(']','[');
Deque<Character> deque = new LinkedList<Character>();
for(int i =0; i< s.length(); i++){
char ch = s.charAt(i);
if(map.containsKey(ch)){
//匹配失败,直接返回false
if(deque.isEmpty() || map.get(ch) != deque.peek()){
return false;
}
//括号匹配成功弹出栈
deque.pop();
}else{
deque.push(ch);
}
}
return deque.isEmpty();
}
}
浙公网安备 33010602011771号