在java中分析格式为A ^ nB ^ n的字符串

时间:2014-06-30 19:07:56

标签: java

我有一个字符串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;

  }

1 个答案:

答案 0 :(得分:2)

if (i != n && L2Stack.empty()) {
    return false;  //more Bs than As
}

应该是

if (i != n) {
    return false;
}

因为如果你还没有读完所有的字符,那么无论堆栈是否为空,你都无法返回true。

我假设AAABBBA应该返回false。

这种改变也会处理非法字符。