LeetCode 括号匹配
问题描述:给定一个字符串s
只包含字符'('
, ')'
, '{'
, '}'
, '['
and']'
的字符串,确定输入字符串是否有效。
如何判定有效:
1. 开括号必须由相同类型的括号封闭。
2. 左括号必须以正确的顺序关闭。
示例1:
输入: s = "()"
输出: true
示例2:
输入: s = "()[]{}"
输出: true
示例3:
输入: s = "(]"
输出: false
示例4:
输入: s = "([)]"
输出: false
示例5:
输入: s = "{[]}"
输出: true
约束:
1 <= s.length <= 104
s
仅由括号组成'()[]{}'
。
分析:
该问题是一个括号匹配问题,针对该问题我们采用的存储方法是栈。因为括号分左右,所以我们有两种思路。第一种,我们把做左括号放入栈中,用右括号进行匹配,如果匹配到就把左括号出栈,最后查看栈中元素总数是否为0,如果为0,我们就返回true,反之返回false。另一种思路为我们把右括号入栈,用左括号进行匹配,后面与第一种一致。
本次我采用的是第一种方法,在该算法中需要注意的是,当有括号没有匹配到左括号的时候就要停止遍历,并返回false。
代码:
class Solution {
public boolean isValid(String s) {
Stack<Character> stack = new Stack<Character>();
for (int i = 0; i < s.length(); i++) {
if((s.charAt(i)=='(')||(s.charAt(i)=='[')||(s.charAt(i)=='{')) {
stack.push(s.charAt(i));
}
if((s.charAt(i)==')')||(s.charAt(i)==']')||(s.charAt(i)=='}')) {
if(stack.empty()) {
return false;
}
if((stack.peek()=='(' && s.charAt(i)==')')||(stack.peek()=='[' && s.charAt(i)==']')||(stack.peek()=='{' && s.charAt(i)=='}')) {
stack.pop();
}else{
return false;
}
}
}
if(stack.empty()) {
return true;
}
return false;
}
}
本文作者:不期而遇y
版权声明:未经授权禁止使用,转载请说明出处!