题目: 已知一个string 类型字符串s,s仅仅由'('
, ')'
, '{'
, '}'
, '['
和 ']'组成
根据以下法则来判断字符串是否合法:
括号类型必须完全配对, "()"
和 "()[]{}"
是合法的,但是"(]"
和 "([)]"
是非法的
思路:既然需要配对,后进的需要先出,我们想到栈就是不错,满足要求,以下是java代码
public boolean isValid(String s) {
boolean result = true;
if (s.length() == 0)
return result;
Stack<Character> stack = new Stack<Character>();
Character out;
char[] temp = s.toCharArray();
for (char a : temp) {
if (a == '{' || a == '[' || a == '(')
stack.push(a);
// Character out;
if (a == '}' || a == ')' || a == ']') {
if (!stack.isEmpty()) { // 处理']'类型
out = stack.pop();
if (a == '}' && out == '{')
continue;
if (a == ')' && out == '(')
continue;
if (a == ']' && out == '[')
continue;
result = false;
return result;
} else {
result = false;
}
}
}
if (!stack.isEmpty()) //处理由盈余的左半边括号 '('类型
result = false;
return result;
}