算法题:括号匹配(小中大括号序列)
括号序列由( )[ ]{ }组成,不合法的括号序列由( { ) },[ } { ],等等。编程实现一个函数,检查一个括号序列是否是合法的括号序列。
解法:
SRE实战 互联网时代守护先锋,助力企业售后服务体系运筹帷幄!一键直达领取阿里云限量特价优惠。思路和“后缀表达式的求解”相似。我们借助栈,每读一个括号,如果是左括号,那么入栈,然后继续读下一个括号;如果是右括号,那么就要看看这个右括号和栈顶的括号是否匹配;如果匹配,那么弹出栈顶的括号,继续读下一个括号。当栈变空时,说明此括号序列是合法的。
public class Test05 {
public static boolean isValid(String exp) {
String left = "([{";
String right = ")]}";
Stack<Character> s = new Stack<Character>();
for (int i = 0, len = exp.length(); i < len; i++) {
char ch = exp.charAt(i);
if (left.indexOf(ch) != -1) {
s.push(ch);
}
else if (right.indexOf(ch) != -1) {
if (!s.isEmpty()) {
char temp = s.pop();
if (ch != right.charAt(left.indexOf(temp))) {
return false;
}
}
else {
return false;
}
}
}
return s.isEmpty();
}
public static void main(String[] args) {
System.out.println(isValid("([()]{})"));
System.out.println(isValid("((){}"));
System.out.println(isValid("[{)()]"));
}
}
更多精彩

