小工具知识网

当前位置: 首页 > 行业知识 > 华为OD机试题-最长合法表达式(java解法)

行业知识

华为OD机试题-最长合法表达式(java解法)

2026-10-25 20:09:34 来源:互联网转载

  一、题目

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

说明:

1.所有数字,计算结果都不超过 long

2.如果有多个长度一样的,请返回第一个表达式的结果

3.数学表达式,必须是最长的,合法的

4.index.php/tags-10.html" >操作符不能连续出现,如 +--+1 是不合法的


输入

字符串


输出

表达式值

示例一

输入

1-2abcd

输出

-1

示例二

输入

1-2abs1-2*3+7dd4-5+6

输出

2

 示例三

输入

a1/0+8d

输出

8

二、解法

这道题有点难度,有以下几个难点:

1、如何找出最长合法表达式?

2、如何计算该表达式?

3、四则运算有一种特殊情况,除数不为零,这种也必须考虑。

上述三个问题的对应解法:

1、用正则表达式筛选表达式。

2、用递归方法计算,主要优势代码简洁。下面链接有详细说明。四则运算字符串计算数值-Java解法https://blog.csdn.net/weixin_43389472/article/details/135962943

3、将 “/0” 替换为“a0”,这样既不影响前面表达式也不影响后面,注意这个“0”是不能去掉的,会造成后面表达式的不合法,如上述 示例三 一样。

解法如下:

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  max) {                max = group.length();                longStr = group;            }        }        return longStr;    }}

欢迎大家留言讨论。

注:题目源自 梦想橡皮擦

上一篇:魔兽世界怎么进全球服务器?

下一篇:织梦文章地图导航功能添加指南,轻松实现网站导航优化!