提取字符串中的最长数学表达式并计算
题目描述
提取字符串中的最长合法简单数学表达式,字符串长度最长的,并计算表达式的值。如果没有,则返回0。
简单数学表达式只能包含以下内容
0-9数字,符号+-*
说明
1、所有数字,计算结果都不超过long
2、如果有多个长度一样的,请返回第一个表达式的结果
3、数学表达式,必须是合法的,简单的
4、操作符不能连续出现,如+--+1是不合法的
输入描述
字符串
输出描述
表达式的值
示例1
输入
1-2abcd
输出
-1
题解
#!/usr/bin/env python
# -*- coding: utf-8 -*-
# 提取字符串中的最长数学表达式并计算
a = input().strip()
length = len(a)
digits = "0123456789"
chars = "+-*"
exp = ""
max_exp = ""
max_len = 0
for i in range(length):
if a[i] in digits:
exp = exp + a[i]
if i < length - 1:
continue
if a[i] in chars:
if len(exp) > 0 and exp[-1] in digits:
exp = exp + a[i]
if i < length - 1:
continue
# print(exp)
if len(exp) > 0:
if exp[-1] in chars:
exp = exp[0:-1]
if len(exp) > max_len:
max_exp = exp
max_len = len(exp)
exp = ""
if max_len > 0:
# print(max_exp)
tokens = []
for j in range(len(max_exp)):
if max_exp[j] in digits:
if len(tokens) > 0:
if isinstance(tokens[-1], int):
tokens[-1] = tokens[-1] * 10 + int(max_exp[j])
else:
tokens = tokens + [int(max_exp[j])]
else:
tokens = tokens + [int(max_exp[j])]
else:
if len(tokens) > 2:
if isinstance(tokens[-2], str) and tokens[-2] == '*':
tokens[-3] = tokens[-3] * tokens[-1]
tokens.pop()
tokens.pop()
tokens = tokens + [max_exp[j]]
if j == len(max_exp) - 1:
if len(tokens) > 2:
if isinstance(tokens[-2], str) and tokens[-2] == '*':
tokens[-3] = tokens[-3] * tokens[-1]
tokens.pop()
tokens.pop()
# print(tokens)
result = 0
for k in range(len(tokens)):
if k == 0:
result = tokens[0]
else:
if isinstance(tokens[k], int):
if tokens[k - 1] == '+':
result = result + tokens[k]
elif tokens[k - 1] == '-':
result = result - tokens[k]
print(result)
else:
print(0)
标签:tokens,max,OD,len,2024,华为,result,exp,表达式
From: https://blog.csdn.net/ggjjl1/article/details/137334945