繁体   English   中英

如何在Python中检查字符是否在字符串中的另一个字符之前

[英]How to check whether a character comes before another character in a string in Python

我正在编写一个确定用户输入的数学方程式是否具有匹配括号的程序。 我要计算出右括号的数量是否等于左括号的数量,但是用户可以输入2) (3 + x)(4 + x) (6.为了避免告诉用户他的括号匹配在这种情况下,我想检查'(')之前是否有')'。

left_parenth = math.count("(")
right_parenth = math.count(")")

total_parenth = right_parenth + left_parenth

if total_parenth % 2 != 0:
    if right_parenth > left_parenth:
        print("\nYou are missing a left parentheses '('")
    elif right_parenth < left_parenth:
        print("\nYou are missing a right parentheses ')'")

elif total_parenth % 2 == 0:
    print("\nYour equation has the correct amount of parentheses")

这里的总体思路是使用堆栈。 遇到开括号时,将其推入堆栈中遇到闭括号时,POP对应于堆栈中的开括号

绝对不需要使用堆栈。 只需计数打开多少个括号即可。 如果该计数曾经为负,则它们不匹配,并且如果计数最终为正,则它们不匹配:

def valid_parens(string):
    open_count = 0
    for char in string:
        if char == "(":
            open_count += 1
        elif char == ")":
            open_count -= 1
            if open_count < 0:
                return False
    return open_count == 0

测试用例:

assert valid_parens("((2+2)-4)*2") == True
assert valid_parens(")(2/2)(") == False
assert valid_parens("()()()") == True
assert valid_parens("((())") == False

尽管可以使用堆栈解决问题,但是这会浪费一些内存。 在正常大小的输入中,这将永远不是问题,但是在非常大的序列中,这将成为问题。 您不需要跟踪Paren本身,而只需跟踪有多少个Paren -总内存使用量是一个整数,而不是遇到的每个Paren堆栈中的一个条目。

def proper_paren(seq):
    open_parens = 0
    for char in seq:
        if char == '(':
            open_parens += 1
        elif char == ')':
            open_parens -= 1
            if open_parens < 0:
                return False
    return open_parens == 0

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM