华为od机试C卷-最长表达式求值

我的喵

1 题目描述

提取字符串中的最长合法简单数学表达式子串,字符串长度最长的,并计算表达式的值,如果没有返回0。简单数学表达式只能包含以下内容0-9 数字,符号±*

说明:
1.所有数字,计算结果都不超过 long
2.如果有多个长度一样的,请返回第一个表达式的结果
3.数学表达式,必须是最长的,合法的
4.操作符不能连续出现,如 ±-+1 是不合法的


输入
字符串
输出
表达式值

示例一
输入: 1-2abcd
输出: -1
示例二
输入: 1-2abs1-2*3+7dd4-5+6
输出: 2
示例三
输入: a1/0+8d
输出: 8

2、审题

这道题有点难度,有以下几个难点:
1、如何找出字符串中的最长合法数学表达式子串?
2、如何计算该数学表达式子串的值?
3、四则运算有一种特殊情况,除数不为零,这种也必须考虑。

上述三个问题的对应解法:
1、用正则表达式筛选表达式。
2、用递归方法计算,主要优势代码简洁。

3、解法

import java.util.Scanner;
import java.util.regex.Matcher;
import java.util.regex.Pattern;public class Main {public static void main(String[] args) {Scanner scanner = new Scanner(System.in);String str = scanner.nextLine();String longStr = dealWith(str); //找到最长合法数学表达式子串if (!longStr.isEmpty()) {int result = calculate(longStr);System.out.println(result);} else {System.out.println(0);}}//判断字符串是否只有数字private static boolean isNumber(String str) {for (int i = 0; i < str.length(); i++) {if (!Character.isDigit(str.charAt(i))) {return false;}}return true;}//利用递归方法计算四则运算,这里+和-放在前面是有特殊原因,因为加法和减法的优先级低于乘法和除法private static int calculate(String str) {if (isNumber(str)) {return Integer.parseInt(str);}if (str.contains("+")) {int index = str.indexOf("+");return calculate(str.substring(0, index)) + calculate(str.substring(index + 1));}if (str.contains("-")) {int index = str.indexOf("-");return calculate(str.substring(0, index)) - calculate(str.substring(index + 1));}if (str.contains("*")) {int index = str.indexOf("*");return calculate(str.substring(0, index)) * calculate(str.substring(index + 1));}if (str.contains("/")) {int index = str.indexOf("/");return calculate(str.substring(0, index)) / calculate(str.substring(index + 1));}return 0;}//借助正则表达式拆出符合要求的表达式private static String dealWith(String str) {//将除数等于0时,表达式就不是合法的数学表达式,所以可以简单地用a0给替换,注意string是不可变量,所以要用新的变量代替String replaceStr = str.replace("/0", "a0");int max = 0;String longStr = "";String regex = "\\d+([\\+\\-*/]\\d+)+"; //这个正则表达式的意思:寻找以数字开头,+-*/其中之一紧随其后,而后又是一个数字的一个或者多个模式Pattern pattern= Pattern.compile(regex);Matcher matcher = pattern.matcher(replaceStr);while (matcher.find()) {String group = matcher.group();if (group.length() > max) {max = group.length();longStr = group;}}return longStr;}
}

网上很多要付费才能看到。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/718439.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

递归实现n的k次方(C语言)

编写一个函数实现n的k次方&#xff0c;使用递归实现。 下面来说一下思路 5的3次方&#xff1a;就是5*(5的3-1次方) 7的4次方&#xff1a;就是7*&#xff08;7的4-1次方&#xff09; 以此类推 n的k次方就是&#xff1a;n* n的&#xff08;k-1&#xff09;次方 int Func(int n,…

HOOPS Communicator对3D大模型轻量化加载与渲染的4种解决方案

今天给大家介绍一些关于3D Web轻量化引擎HOOPS Commuicator的关键概念&#xff0c;这些概念可以帮您在HOOPS Communicator流缓存服务器之上更好地构建您自己的模型流服务器。如果您是有大型数据集&#xff0c;那么&#xff0c;使用流缓存服务器可以极大地帮助您最大限度地减少内…

Unity-PDF分割器(iTextSharp)

PDF分割器 Unity-PDF分割器前言核心思路解决过程一、Unity安装iTextSharp二、运行时计算将要生成文件的大小三、分割核心代码四、使用StandaloneFileBrowser五、其他的一些脚本六、游戏界面主体的构建MainWindowWarningPanel & FinishPanel By-Round Moon Unity-PDF分割器 …

VMware虚拟机安装详细指南

在多任务和多环境开发的需求日益增长的当下&#xff0c;虚拟机技术凭借其灵活性和高效性成为了IT行业的一大利器。VMware作为虚拟化技术的领军者&#xff0c;其提供的VMware Workstation Pro软件允许用户在一台物理机上运行多个独立的虚拟机&#xff0c;每个虚拟机都可以拥有自…

基于主从模式的Reactor的仿muduo网络库

&#x1f307;个人主页&#xff1a;平凡的小苏 &#x1f4da;学习格言&#xff1a;命运给你一个低的起点&#xff0c;是想看你精彩的翻盘&#xff0c;而不是让你自甘堕落&#xff0c;脚下的路虽然难走&#xff0c;但我还能走&#xff0c;比起向阳而生&#xff0c;我更想尝试逆风…

【.NET Core】.NET中的流(Stream)

【.NET Core】.NET中的流&#xff08;Stream&#xff09; 文章目录 【.NET Core】.NET中的流&#xff08;Stream&#xff09;一、流&#xff08;Stream&#xff09;1.1 FileStream类1.2 IsolatedStorageFileStream类1.3 MemoryStream类1.4 BufferedStream类1.5 NetworkStream类…

谷歌浏览器打开,图片糊了

现象&#xff08;问题&#xff09;&#xff1a;早上开机&#xff0c;打开谷歌浏览器发现里面的所有图片相关的都糊了&#xff0c;离谱&#xff01; 查阅一番资料后发现&#xff1a; 谷歌浏览器的硬件加速模式被打开了 解决&#xff1a; 打开谷歌浏览器->设置->系统->…

【C++从练气到飞升】01---C++入门

&#x1f388;个人主页&#xff1a;库库的里昂 ✨收录专栏&#xff1a;C从练气到飞升 &#x1f389;鸟欲高飞先振翅&#xff0c;人求上进先读书。 目录 推荐 前言 什么是C C的发展史 &#x1f4cb;命名空间 命名空间定义 命名空间使用 命名空间的嵌套 std命名空间的使用 &#…

编译 qsqlmysql.dll QMYSQL driver not loaded

Qt 连接MySQL数据库&#xff0c;没有匹配的qsqlmysql.dll, 需要我们跟进自己Mysql 以及QT版本自行编译的。异常如下图&#xff1a; 安装环境为 VS2019 Qt5.12.12&#xff08;msvc2017_64、以及源码&#xff09; 我的安装地址&#xff1a;D:\Qt\Qt5.12.12 Mysql 8.1.0 默认安…

Java 定时器

Java 定时器 package com.su.test.threadtest; import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.Date; import java.util.Timer; import java.util.TimerTask; /** 在这里插入代码片使用定时器指定定时任务。timer&#xff1a;计时器…

2023年下半年教师资格证考试《教育知识与能力》(中学)题

3.李老师在初二选择了人数、性别比例、学习成绩、教材各方面情况相同的两个班进行教学&#xff0c;对其中一班采用讲授法&#xff0c;对另一个班采用自学辅导法&#xff0c;经过一个阶段的教学后进行测验&#xff0c;以比较两种方法教学效果&#xff0c;李老师采用的方法属于&a…

RMSNorm 类中引入一些参数

在 RMSNorm 类中&#xff0c;引入可学习的参数&#xff0c;以增强模型的表达能力和适应性。以下是一些常见的方法&#xff1a; 可学习的缩放参数&#xff08;Scale&#xff09;&#xff1a; 除了 self.weight&#xff0c;可以为每个维度引入一个可学习的缩放参数。这可以通过创…

PyTorch 中的 apply

Abstract nn.Module[List].apply(callable)Tensor.apply_(callable) → TensorFunction.apply(Tensor...) nn.Module[List].apply()? 源码: def apply(self: T, fn: Callable[[Module], None]) -> T:"""Typical use includes initializing the paramete…

大语言模型LLM代码:PyTorch库与ChatGLM模型(LLM系列21)

文章目录 通过阅读大语言模型的代码,熟悉并理解PyTorch大语言模型LLM代码:PyTorch库与ChatGLM模型(LLM系列21)大语言模型中的PyTorchChatGLM3-6B模型代码ChatGLMModel类总览ChatGLMModel类说明ChatGLMModel类核心代码片段通过阅读大语言模型的代码,熟悉并理解PyTorch 大语…

基于yolov5的飞机蒙皮缺陷检测系统,可进行图像目标检测,也可进行视屏和摄像检测(pytorch框架)【python源码+UI界面+功能源码详解】

功能演示&#xff1a; 基于yolov5的飞机蒙皮缺陷检测系统&#xff0c;系统既能够实现图像检测&#xff0c;也可以进行视屏和摄像实时检测_哔哩哔哩_bilibili &#xff08;一&#xff09;简介 基于yolov5的飞机蒙皮缺陷检测系统是在pytorch框架下实现的&#xff0c;这是一个完…

单元测试:参数匹配器和参数捕捉器

目录标题 第一章、参数匹配器1.1&#xff09;参数匹配器列表1.2&#xff09;参数匹配器示例①anyInt()②any(Class<> type)③eq()④same(expectedObject)⑤endsWith() 第二章、参数捕捉器2.1&#xff09;Captor2.2&#xff09;ArgumentCaptor类 第一章、参数匹配器 1.1&…

vue模板语法中的类和样式绑定

最近公司要求&#xff0c;在学习前端vue知识&#xff0c;记录一些语法要点 在绑定类和样式时&#xff0c;如果使用三目运算(三元运算)时&#xff0c;html中使用的是大括号[], 以及使用数组绑定多个class时&#xff0c;也是大括号&#xff0c; 其他的使用中括号{} 比如&…

什么是ABA问题及ABA问题的解决方法。

什么是ABA问题 ABA问题&#xff1a;一个线程thread1读到的数据是22&#xff0c;它对数据进行操作后变为23&#xff0c;又有一个线程thread2读到数据22&#xff0c;对它进行操作后数据变为33并更新回去&#xff0c;又来一个线程3读取数据33&#xff0c;更新数据为22后又更新回去…

js【详解】自动类型转换

运算符 Symbol 数字 会报错 Cannot convert a Symbol value to a number Symbol 字符串 会报错 Cannot convert a Symbol value to a string 存在对象&#xff0c;数组&#xff0c;函数时 对象&#xff0c;数组&#xff0c;函数会先执行其 toString() 方法&#xff0c;…

用CSS实现一个扇形

用CSS实现扇形的思路和三角形基本一致&#xff0c;就是多了一个圆角的样式&#xff0c;实现一个90的扇形&#xff1a; div{border: 100px solid transparent;width: 0;heigt: 0;border-radius: 100px;border-top-color: red; }