华为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卷刷题日记 文章被收录于专栏
机试刷题记录