给定一个只包括 '('
,')'
,'{'
,'}'
,'['
,']'
的字符串 s
,判断字符串是否有效。
有效字符串需满足:
- 左括号必须用相同类型的右括号闭合。
- 左括号必须以正确的顺序闭合。
- 每个右括号都有一个对应的相同类型的左括号。
示例 1:
输入:s = "()"
输出:true
示例 2:
输入:s = "()[]{}"
输出:true
示例 3:
输入:s = "(]"
输出:false
思路:可以想到用一个辅助栈,遇到左括号就push进栈,遇到右括号就和栈顶元素比较,如果符合就弹出栈顶元素,否则返回false。最后在判断栈是否为空,为空返回true;
用的leetcode网站写的有点丑陋。
public boolean isValid(String s) {
Deque<Character> stack = new ArrayDeque<>();
int n = s.length();
for(int i = 0; i < n; i++){
if(s.charAt(i) == '(' || s.charAt(i) == '[' || s.charAt(i) == '{'){
stack.offer(s.charAt(i));
}else if(s.charAt(i) == ')' || s.charAt(i) == ']' || s.charAt(i) == '}'){
if(stack.isEmpty()){
return false;
}else{
if(stack.peekLast() == '(' && s.charAt(i) == ')'){
stack.pollLast();
}else if(stack.peekLast() == '[' && s.charAt(i) == ']'){
stack.pollLast();
}else if(stack.peekLast() == '{' && s.charAt(i) == '}'){
stack.pollLast();
}else{
return false;
}
}
}
}
return true;
}
Comments NOTHING