我有一个字符串As和Bs,我需要分析语言A ^ nB ^ n。我可以使用以下代码在大多数时间工作,但是当有一个不是“A”或“B”的字母时,它仍然可以返回true,例如:AABACABAA不应该是真的,但它说它是。 AABB是真的; AABBAABB不是真的。我必须使用堆栈,不允许使用计数。
public static boolean isL2(String line){
// set up empty stacks
Stack L2Stack = new Stack();
// initialize loop counter
int i = 0;
int n = line.length();
/* Push all 'A's to a_stack */
while ((i < line.length()) && (line.charAt(i) == 'A')) {
char ch = line.charAt(i);
L2Stack.push(ch);
i++;
}
/* Pop an 'A' for each consecutive 'B' */
while ((i < line.length()) && (line.charAt(i) == 'B')) {
if (!L2Stack.empty()){
L2Stack.pop();
i++;
}
else
return false;
}
if (i == n && !L2Stack.empty()){
return false; // more As than Bs
}
if (i != n && L2Stack.empty()){
return false; //more Bs than As
}else
return true;
}
答案 0 :(得分:2)
if (i != n && L2Stack.empty()) {
return false; //more Bs than As
}
应该是
if (i != n) {
return false;
}
因为如果你还没有读完所有的字符,那么无论堆栈是否为空,你都无法返回true。
我假设AAABBBA应该返回false。
这种改变也会处理非法字符。