Leet code 20.有效括号区配
问题描述
给定一个只包括 '(',')','{','}','[',']' 的字符串 s ,判断字符串是否有效。
有效字符串需满足:
左括号必须用相同类型的右括号闭合。
左括号必须以正确的顺序闭合。
每个右括号都有一个对应的相同类型的左括号
解题思路
利用栈来实现,当出现左括号时入栈,当出现右括号时看栈内的括号是否配对,当遍完后如果栈为空则是有效,栈不为空则无效。
代码实现
class Solution {
public static boolean isValid(String s) {
// 只有一个括号肯定不合法
if (s.length() == 1) {
return false;
}
char[] chars = s.toCharArray();
if (chars[0] == '}' || chars[0] ==']' || chars[0] == ')') {
return false;
}
Stack<Character> stack = new Stack<>();
for (int i = 0; i < chars.length; i++) {
if (chars[i] == '{' || chars[i] == '[' || chars[i] =='(') {
stack.push(chars[i]);
} else {
Character peek = null;
if (stack.isEmpty()) {
return false;
} else {
peek = stack.pop();
}
if (chars[i] == '}') {
if (peek != '{') {
return false;
}
} else if (chars[i] ==']') {
if (peek != '[') {
return false;
}
} else if (chars[i] ==')') {
if (peek != '(') {
return false;
}
}
}
}
return stack.isEmpty();
}
}
实现细节
如果只现一个括号肯定是无效直接返回,如果第一个元素是右括号,可直接判定是无效。
出现左括号直接入栈,如果出现右括号,看栈中是否有元素,如果没有元素则无效,如果有元素查看括号是否配对。当执行完后看栈中是否存在元素如果存在如是无效,栈空则是有效。

浙公网安备 33010602011771号