题目来源链接:有效的括号
题目说明:
给定一个只包括 ‘(’,’)’,’{’,’}’,’[’,’]’ 的字符串 s ,判断字符串是否有效。 有效字符串需满足: 左括号必须用相同类型的右括号闭合。 左括号必须以正确的顺序闭合。
示例:
示例 1:
输入:s = "()"
输出:true
示例 2:
输入:s = "()[]{}"
输出:true
示例 3:
输入:s = "(]"
输出:false
示例 4:
输入:s = "([)]"
输出:false
示例 5:
输入:s = "{[]}"
输出:true
提示:
1 <= s.length <= 104
s 仅由括号 '()[]{}' 组成
思路:
首先排除字符串长度为奇数的情况;将左边的字符’{’ ‘(’ ‘[’ 入栈; 剩余的字符’}’ ‘)’ ']'和进入栈中的元素在出栈时进行比较;不符合的都返回false;最终结束时还需判断是否空栈;
class Solution {
public boolean isValid(String s) {
Stack<String> st = new Stack<>();
if (s.length() % 2 == 1) {
return false;
}
Stack<Character> stack = new Stack<>();
for (int i = 0; i < s.length(); i++) {
char c = s.charAt(i);
if (c == '{' || c == '[' || c == '(') {
stack.push(c);
} else {
if (stack.isEmpty()) {
return false;
} else {
char tail = stack.pop();
if (c == '}' && tail != '{') {
return false;
} else if (c == ')' && tail != '(') {
return false;
} else if (c == ']' && tail != '[') {
return false;
}
}
}
}
return stack.isEmpty();
}
}
|