当前位置: 首页 > 面试经验 >

华为OD机试统一考试D卷C卷 - 最长合法表达式

优质
小牛编辑
91浏览
2024-06-02

华为OD机试统一考试D卷C卷 - 最长合法表达式

题目描述:最长合法表达式(本题分值200)

提取字符串中的最长合法简单数学表达式字符串长度最长的,并计算表达式的值。如果没有返回 0
简单数学表达式只能包含以下内容
0-9 数字,符号+-*
说明:
1.所有数字,计算结果都不超过 long

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

3.数学表达式,必须是最长的,合法的
4.操作符不能连续出现,如 +--+1 是不合法的

输入描述 字符串
输出描述 表达式值 示例一 输入
1-2abcd 输出

-1

输入描述

字符串

输出描述

表达式值

用例

输入

1-2abcd

输出

-1

Java解法1

import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;

class Main {
    public static void main(String[] args) {
        // 创建一个Scanner对象来处理输入
        Scanner in = new Scanner(System.in);
        // 读取一行输入
        String line = in.nextLine();
        // 关闭Scanner对象
        in.close();

        // 调用extractExpressions方法提取输入中的合法表达式
        List<String> expressions = extractExpressions(line);

        // 使用Java 8的Lambda表达式对表达式按长度进行排序
        expressions.sort((s1, s2) -> Integer.compare(s2.length(), s1.length()));

        // 如果表达式列表不为空,则计算并打印最长表达式的结果
        // 否则,打印0
        if (!expressions.isEmpty()) {
            System.out.println(calc(expressions.get(0)));
        } else {
            System.out.println(0);
        }
    }

    // 提取合法表达式的方法
    public static List<String> extractExpressions(String line) {
        // 创建一个列表来存储提取的表达式
        List<String> expressions = new ArrayList<>();
        // 初始化开始索引为-1
        int start = -1;

        // 遍历输入字符串的每个字符
        for (int i = 0; i < line.length(); i++) {
            char cur = line.charAt(i);

            // 如果当前字符是数字
            if (Character.isDigit(cur)) {
                // 如果开始索引为-1,设置开始索引为当前索引
                if (start == -1) {
                    start = i;
                }
            } else if (start != -1 && "+-*".contains(String.valueOf(cur))) {
                // 如
 类似资料: