华为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))) {
                // 如

剩余60%内容,订阅专栏后可继续查看/也可单篇购买

机试E卷D卷刷题日记 文章被收录于专栏

机试刷题记录

全部评论
华子机试有非编程题吗
点赞 回复 分享
发布于 06-04 15:52 四川
你这答案不对啊 1-babcd这种都当成对的表达式了
点赞 回复 分享
发布于 09-05 11:44 北京

相关推荐

od面经我是土木工程专业转行到it相关专业的。20年毕业,在土木行业工作了四年,今年年初开始考虑转行。由于是在职期间准备,效率比较低。再加上中途有一两次心态的变化,自身情况导致整个周期比较长,中间准备了几个月时间才开始技术面。在整个过程中hr姐姐都有贴心的指导和相关的学习资料的提供。机考:我用的语言是java。我从年初开始准备,主要是刷leetcode上面的算法题目。由于编程语言能力较差,很大一部份时间也花在了学习java上。另外在牛客网上学习输入输出模式很重要很重要,leetcode上没有这模式,不熟悉的话比较麻烦,因为是根据通过用例得分的。性格测试:性格测试相对简单,阳光开朗的性格比较受欢迎,另外注意不要前后矛盾即可。资格面试:这是部门的hr来面试的,主要了解核实基本情况,询问换工作的原因,以及换工作的意愿。技术面试:我在9月份离职开始专门准备技术面试,之前因为工作忙没有准备,额外要求多了几天来准备面试。一面:面试官比较严格,也了解我的情况,问问题是聊天式的问,聊到什么问什么。有聊到java虚拟机原理、mysql语句、继承、多态这些概念。最后是一道手撕代码题。是一道中等难度的字符题目。用idea写出来了,运行了几个算例通过了就结束了。二面:主要问了java&nbsp;bean的内容,java基本知识比如什么是面向对象编程、什么是面向对象的三大特征,可能是也了解我不是科班的,太深的聊不下去。手撕代码是一道简单题,也是idea写出来了运行算例通过了就结束了。主管面:和资格面类似,有部门的主管来聊岗位的职责、工作模式、地点等等。#转行找工作求助阵地##华为od##华为od面经#目前已审批完毕,坐等offer入职啦,希望这些分享对转行的伙伴有所帮助
点赞 评论 收藏
分享
1 2 评论
分享
牛客网
牛客企业服务