题目地址:https://leetcode.cn/problems/valid-parentheses/
题目描述(英文)
Given a string s containing just the characters ‘(’, ‘)’, ‘{’, ‘}’, ‘[’ and ‘]’, determine if the input string is valid.
An input string is valid if:
1.Open brackets must be closed by the same type of brackets.
2.Open brackets must be closed in the correct order.
3.Every close bracket has a corresponding open bracket of the same type
题目描述(中文)
给定一个只包括 ‘(’,‘)’,‘{’,‘}’,‘[’,‘]’ 的字符串 s ,判断字符串是否有效。
有效字符串需满足:
1.左括号必须用相同类型的右括号闭合。
2.左括号必须以正确的顺序闭合。
3.每个右括号都有一个对应的相同类型的左括号。
实例
示例 1:
输入:s = “()”
输出:true
示例 2:
输入:s = “()[]{}”
输出:true
示例 3:
输入:s = “(]”
输出:false
提示:
1 <= s.length <= 104
s 仅由括号 ‘()[]{}’ 组成
解题方法
方法:栈
语言Java
**解题思路:**遍历输入的字符串,遇到左括号将与其对应的右括号入栈,然后开始逐项匹配。不匹配的几种情况:①左括号多余,没有发现与左括号匹配的右括号②括号的类型匹配不了,如{]③右括号多余
于是具体判定方式:遇到左括号将与其对应的右括号入栈。继续判断,若栈空或者栈顶元素与当前项不匹配,则括号不匹配。都不是的话,将栈顶元素出栈,继续循环判断。
class Solution {
public boolean isValid(String s) {
Deque<Character> deque = new LinkedList<>();
char ch;
for(int i = 0; i < s.length(); i++){
ch = s.charAt(i);
//碰到左括号将与其对应的右括号入栈
if(ch == '(') {
deque.push(')');
}else if(ch == '{'){
deque.push('}');
}else if(ch == '['){
deque.push(']');
}else if(deque.isEmpty() || deque.peek() != ch){
return false;
}else{ //最后栈顶元素与右括号匹配即,将栈顶元素出栈
deque.pop();
}
}
//最后判断栈中元素是否匹配
return deque.isEmpty();
}
}
总结:
Deque 继承了 Queue 接口,它主要由三种用途:双端队列、栈、普通队列。
Deque 作为堆栈只需要记住三个方法就可以了:
push(e)、pop()、peek()。
peek():获取但不移除此队列的头;如果此队列为空,则返回 null。
日期:
2022年12月3日