📜  检查给定的二进制表达式是否有效(1)

📅  最后修改于: 2023-12-03 15:26:49.476000             🧑  作者: Mango

检查给定的二进制表达式是否有效

在编程中,我们经常需要验证输入的二进制表达式是否合法。一般来说,二进制表达式合法当且仅当:每个字符都是 0 或 1,且左右括号配对且正确嵌套。本文将介绍两种解法来判断是否有效。

解法一:栈

使用栈,遍历字符串,遇到左括号入栈,遇到右括号出栈并检查是否与栈顶元素配对。如果不配对或者栈为空,则返回 False。遍历完字符串后,如果栈不为空,则表明左括号没有被正确闭合,返回 False。

def check_valid_expression(expression: str) -> bool:
    stack = []
    for char in expression:
        if char == '0' or char == '1':
            continue
        elif char == '(':
            stack.append(char)
        elif char == ')':
            if not stack or stack.pop() != '(':
                return False
    return not stack
  • expression: 输入的二进制表达式。
  • 返回值:True 表示输入的表达式是有效的,False 表示输入的表达式是无效的。
解法二:计数器

我们可以使用两个计数器,一个计算左括号的数量,一个计算右括号的数量。遍历字符串,每次遇到左括号,计数器加一,每次遇到右括号,计数器减一。如果计数器小于零,或者遍历完字符串后计数器不为零,则说明左右括号没有配对,返回 False。最后,我们需要检查字符串中是否只包含 0/1/(/),以确保输入的字符串是一个有效的二进制表达式。

def check_valid_expression(expression: str) -> bool:    
    left_count, right_count = 0, 0
    for char in expression:
        if char == '0' or char == '1':
            continue
        elif char == '(':
            left_count += 1
        elif char == ')':
            right_count += 1
            if right_count > left_count:
                return False
    return left_count == right_count and all(c in {'0','1','('} for c in expression)
  • expression: 输入的二进制表达式。
  • 返回值:True 表示输入的表达式是有效的,False 表示输入的表达式是无效的。
总结

本文介绍了两种解法来判断二进制表达式是否有效:栈和计数器。这两种算法时间复杂度都是 O(n),但是实现方式不同。在实际应用中,我们可以根据需要选择最合适的算法来检查二进制表达式是否有效。