首页 > 其他分享 >2024年华为OD机试题-提取字符串中的最长数学表达式并计算

2024年华为OD机试题-提取字符串中的最长数学表达式并计算

时间:2024-04-04 21:29:51浏览次数:24  
标签:tokens max OD len 2024 华为 result exp 表达式

提取字符串中的最长数学表达式并计算

题目描述

提取字符串中的最长合法简单数学表达式,字符串长度最长的,并计算表达式的值。如果没有,则返回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

相关文章

  • 红明谷初赛2024-web-wp
    这次队里我们仨发挥中规中矩,排14名。只能说最后unauth那道会错了意,然后卡住了,后面才发现是原题秒出的那种.....确实是我傻逼了....ezphp可以用endoafr报错拿到文件内容,然后就是一个匿名类的读取。<?phphighlight_file(__FILE__);//flag.phpif(isset($_POST['f'])......
  • nodejs中使用Nunjucks 模板引擎
    要在Koa2中使用Nunjucks模板引擎,你需要进行一些额外的设置。以下是一个示例代码,演示了如何在Koa2中集成Nunjucks:首先,确保已经安装了Koa和Nunjucks:npminstallkoanunjucks然后,在项目中创建一个名为app.js的文件,并添加以下代码:constKoa=require('koa');con......
  • 人是否应该以貌取人 英语作文 四级备考 20240404
    题目:Doyouagreeordisagreewiththefollowingstatement?Oneshouldneverjudgeapersonbyexternalappearances.Usespecificreasonsanddetailstosupportyouropinion.(150words)作文:Ifirmlybelievethatoneshouldneverjudgeapersonsolelybyt......
  • (谷歌浏览器)如何在vscode中搭建vue.js devtools的环境
    搭建过程中明明所有操作步骤都做了,却还是出现下面这种情况: 以下是正确的搭建操作步骤:根据一下图片在vscode中创建文件夹;将以下代码写入; <scripttype="text/javascript"src="../js/vue.js"></script>接下来就是我们需要点击https://vuejs.zcopy.site/,进入到网站后,......
  • 少儿编程 2024年3月电子学会图形化编程等级考试Scratch一级真题解析(选择题)
    2024年3月scratch编程等级考试一级真题选择题(共25题,每题2分,共50分)1、单击下列哪个按钮,能够让舞台变为“全屏模式”A、B、C、D、答案:C考点分析:考查scratch平台的使用,四个选项分别是:开始程序,停止程序,全屏模式,恢复正常模式,答案C2、下列哪个选项可以将当前背景换成第二......
  • 华为交换机M-LAG配置
    基于M-LAG组成的双活系统提供了设备级的可靠性,将双归接入的两台设备在逻辑上虚拟成一台设备。M-LAG提供了一个没有环路的二层拓扑同时实现冗余备份。多级M-LAG互联可以在保证可靠性、提供链路利用率的同时扩展双归接入的网络规模,满足客户的需求。  方法/步骤1第一......
  • 26岁女硕士:被省烟草局提前录取了,但我实在高兴不起来,因为我是学计算机的,华为也发了offe
    刷到一则网友爆料感觉挺有意思,一位女硕士研究生,本科学的是计算机专业,因为父母建议报考了省烟草局,没曾想被提前录取,而这位同学却怎么也高兴不起来。她的理由是不想年纪轻轻就过一眼望得到头的日子,想出去闯一闯。有的网友却不干了,省编制多好呀,比铁饭碗还多了一层金属!......
  • C语言 | Leetcode C语言题解之第8题字符串转换整数atoi
    题目:题解:intmyAtoi(char*s){inti=0;intout=0;intpol=1;intlen=strlen(s);if(len==0)return0;while(s[i]=='')i++;//删除空格if(s[i]=='-'){//判断正负pol=-1;i++;}else......
  • 【leetcode】将x减到0的最小操作数/水果成篮/找到字符串中所有字母异位词{史上最容易
    文章目录1.将x减到0的最小操作数2.水果成篮3.找到字符串中所有字母异位词1.将x减到0的最小操作数分析题目x不断地减去数组两端的值看能否减到0;是不是就是在问:nums数组中存不存在【左端+右端】组成的连续区间,区间上数的和为x继续分析==》是不是就是在问:nums......
  • 2024.3.30 模拟赛
    A数列删除至少删除\(m\)个数,意思就是最多保留\(n-m\)个数。删除的总和最小,意思就是保留的总和最大。非降子序列问题可以用经典的动态规划来解决。用\(f[i][j]\)表示,当前选的最后一个数是\(a[i]\),一共选了\(j\)个数,选的数总和最大是多少。转移就是枚举上一个数\(a[......