-1

我正在解决下一个技术问题(Q1):http: //blog.sdeskills.com/qotd-2016-oct-17-resistance-is-futile/

它几乎完成了,只有一项任务待处理。评估输入是否平衡。检查括号是否按顺序完成,但不评估标记。

在给定的子网络中不能混合串联/并联连接,因此 (500+200|300) 是不允许的。

这是我当前的代码:https ://repl.it/EC3i/2 关于如何将前面的表达式评估为错误的任何想法?

4

1 回答 1

1

尝试这个。此代码检查运算符 sereis 和平衡括号。

static boolean isBalanced(String s) {
    Deque<Character> operators = new LinkedList<>();
    operators.push('#');
    for (int i = 0; i < s.length(); ++i) {
        if (operators.isEmpty()) return false;
        char ch = s.charAt(i);
        switch (ch) {
        case '(': operators.push('#'); break;
        case ')': operators.pop(); break;
        case '+':
            switch (operators.peek()) {
            case '#': operators.pop(); operators.push(ch); break;
            case '+': break;
            default: return false;
            }
            break;
        case '|':
            switch (operators.peek()) {
            case '#': operators.pop(); operators.push(ch); break;
            case '|': break;
            default: return false;
            }
            break;
        }
    }
    return operators.size() == 1;
}

和 JUnit 测试代码。

@Test
public void testIsBalanced() {
    assertTrue(isBalanced("(2)"));
    assertTrue(isBalanced("(2+3+3)"));
    assertTrue(isBalanced("2+3+3"));
    assertTrue(isBalanced("2+(4|5|5)+3"));
    assertTrue(isBalanced("2+(4|(2+3+4)|5)+3"));
    assertTrue(isBalanced("(2)+3()"));
    assertFalse(isBalanced("(2"));
    assertFalse(isBalanced("(2))"));
    assertFalse(isBalanced("((2)"));
    assertFalse(isBalanced("2|3+3"));
    assertFalse(isBalanced("2+(4|5+5)+3"));
    assertFalse(isBalanced("2+3|3"));
}
于 2016-10-21T09:18:32.213 回答