華為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.pswp.cn/news/718439.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/718439.shtml
英文地址,請注明出處:http://en.pswp.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; }