查找反向波兰表示法(后缀)表达式的词典顺序?

时间:2014-12-07 13:21:10

标签: python postfix-notation

我编写了一个python程序,用于将中缀表达式转换为后缀表达式(又名反向波兰表示法)。在我的问题中,只显示数字0-9,以及运算符*和+。 我现在需要找到代表后缀方程的按字典顺序排列的最大字符串。 例如:

  • 中缀eq:2 * 4 * 3 + 9 * 3 + 5
  • Postfix eq:24 * 3 * 93 * + 5 +
  • 莱克斯。最大:243 ** 93 * 5 ++< ----我不知道怎么弄这个

1 个答案:

答案 0 :(得分:0)

鉴于这些约束(只有0到9之间的数字,没有空格,只有乘法和求和),以下内容将按您的要求执行:

expr1 = '2*4*3+9*3+5'
expr2 = '9*3+5+3*4*2'

def reverse_polish_nation(expr):
    terms = expr.split('+')
    facs = [ sorted(term.split('*')) for term in terms ]

    rpn_terms = ['{}{}'.format(''.join(factors),
        '*'*(len(factors)-1)) for factors in facs]
    rpn_expr = '{}{}'.format(''.join(sorted(rpn_terms)), '+'*(len(rpn_terms)-1))
    return rpn_expr

print(reverse_polish_nation(expr1), reverse_polish_nation(expr2) )
# output: ('234**39*5++', '234**39*5++')