69.有效的括号
给定一个只包括 '(',')','{','}','[',']' 的字符串 s ,判断字符串是否有效。
有效字符串需满足:
- 左括号必须用相同类型的右括号闭合。
- 左括号必须以正确的顺序闭合。
- 每个右括号都有一个对应的相同类型的左括号。
示例1:
输入:s = "()"
输出:true
示例2:
输入:s = "()[]{}"
输出:true
示例3:
输入:s = "(]"
输出:false
示例4:
输入:s = "([])"
输出:true
提示:
- 1 <= s.length <= 104
- s 仅由括号 '()[]{}' 组成
代码:
class Solution {
public boolean isValid(String s) {
//如果字符串长度为奇数,直接返回false,因为括号必须成对出现
if(s.length()%2==1)return false;
//使用双端队列作为栈结构来存储左括号
Deque<Character>stack = new LinkedList<>();
//创建映射关系:右括号 -> 对应的左括号
Map<Character,Character>mp = new HashMap<>();
mp.put(')', '(');
mp.put(']', '[');
mp.put('}', '{');
//遍历字符串中的每个字符
for(int i=0;i<s.length();i++){
char c = s.charAt(i);
//如果当前字符是右括号
if(mp.containsKey(c)){
//检查栈是否为空或者栈顶元素是否不匹配当前右括号对应的左括号
if(stack.isEmpty()||stack.peek()!=mp.get(c))return false;//不匹配则直接返回false
//匹配则弹出栈顶的左括号
stack.pop();
}else stack.push(c);//如果是左括号,压入栈中
}
//最后检查栈是否为空,为空说明所有括号都正确匹配
return stack.isEmpty();
}
}

浙公网安备 33010602011771号