📅  最后修改于: 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),但是实现方式不同。在实际应用中,我们可以根据需要选择最合适的算法来检查二进制表达式是否有效。