以下布尔方法确定(99%的时间!(是否由各种括号组成的给定字符串是'balanced',即。如此订购的括号将构成有效的句法安排。括号单独馈入数组列表,然后将阵列列表作为堆栈起作用,在列表末端显示有效对时,将其删除有效的对。然后,一个空列表返回true,向"平衡"安排发出信号。
我的问题是,为什么以下"不平衡"输入...
([](({(}
返回true?
如果有人花时间理解问题,我将非常感谢。
public static boolean isBalanced(String e) {
char a[] = e.toCharArray();
ArrayList<Character> b = new ArrayList<Character>();
for (int i = 0; i<a.length; i++){
b.add(a[i]);
while (b.size() >= 2 && ((b.get(b.size()-2)=='(' && b.get(b.size()-1)==')') || (b.get(b.size()-2)=='[' && b.get(b.size()-1)==']') || (b.get(b.size()-2)=='{' && b.get(b.size()-1)=='}'))){
b.remove(b.size()-2);
b.remove(b.size()-1);
}
if (b.isEmpty()){
return true;
}
}
return false;
}
,因为在检查了( [ ] )
IE之后。i=3
条件b.isEmpty()
是正确的。
更改条件:
if (b.isEmpty() && i == a.length - 1) {
return true;
}