下面的代码用于判断一个串中的括号是否匹配所谓匹配是指不同类型的括号必须左右呼应,可以相互包含,但不能交叉
例如: ..(..[..]..).. 是允许的; ..(…[…)….]…. 是禁止的
对于 main 方法中的测试用例,应该输出: false true false false
public class 括号问题 {
public static boolean isGoodBracket(String s) {
Stack<Character> a = new Stack<Character>();
for (int i = 0; i < s.length(); i++) {
char c = s.charAt(i);
if (c == ‘(‘) // 将每个第一次匹配的括号的匹配括号加入到栈中去
a.push(‘)‘);
if (c == ‘[‘)
a.push(‘]‘);
if (c == ‘{‘)
a.push(‘}‘);
if (c == ‘)‘ || c == ‘]‘ || c == ‘}‘) { // 遇到结束的括号的时候进行判断
if (a.size() == 0) // 就是栈中没有数据
return false; // 填空
if (a.pop() != c) // 如果遇到的和弹出的不一致的话也就是出现重叠
return false;
}
}
if (a.size() != 0) // 到最后栈中还有元素的话,也是属于不匹配的类型
return false; // 填空
return true;
}
public static void main(String[] args) {
System.out.println(isGoodBracket("...(..[.)..].{.(..).}..."));
System.out.println(isGoodBracket("...(..[...].(.).).{.(..).}..."));
System.out.println(isGoodBracket(".....[...].(.).){.(..).}..."));
System.out.println(isGoodBracket("...(..[...].(.).){.(..)...."));
}
}
原文地址:http://blog.csdn.net/xlgen157387/article/details/44959973