题目
给定一个只包括 '(',')','{','}','[',']' 的字符串 s ,判断字符串是否有效。
有效字符串需满足:
左括号必须用相同类型的右括号闭合。
左括号必须以正确的顺序闭合。
思路
就用最基本的方法,使用栈,遇到左括号入栈,遇到右括号出栈,最后判断栈是否为空,若为空则给定字符串正确,否则错误。但是,一定要注意“}}}” 这种形式的字符串,因为开头是右括号,正常处理需要出栈,此时栈内还没有元素,会有异常,所以需要特殊处理。但不难发现,凡是出现异常,这个字符串绝对不是有效的字符串,这样就很容易处理了。
代码
public static boolean isValid(String s) {
Stack<Character> stack = new Stack<Character>();
for (int i = 0; i < s.length(); i++) {
try {
switch (s.charAt(i)) {
case '(':
case '{':
case '[':
stack.push(s.charAt(i));
break;
case ')':
if (stack.pop() != '(') {
return false;
}
break;
case ']':
if (stack.pop() != '[') {
return false;
}
break;
case '}':
if (stack.pop() != '{') {
return false;
}
break;
}
} catch (Exception e) {
return false;
}
}
if (stack.isEmpty()) {
return true;
} else {
return false;
}
}