华为OD机试题 - 最长合法表达式(JavaScript)| 代码+思路

本文介绍了华为在线开发(OD)机试题中的一道问题——求解最长合法简单数学表达式。内容包括题目描述、输入输出说明、示例以及解题思路。建议理解并模仿写出代码,以提高通过率。同时提供了相关资源链接和原创解题代码。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

最近更新的博客

华为OD机试题 - 字符串加密(JavaScript)
华为OD机试题 - 字母消消乐(JavaScript)
华为OD机试题 - 字母计数(JavaScript)
华为OD机试题 - 整数分解(JavaScript)
华为OD机试题 - 单词反转(JavaScript)

使用说明

参加华为od机试,一定要注意不要完全背诵代码,需要理解之后模仿写出,通过率才会高。

华为 OD 清单查看地址:https://blog.youkuaiyun.com/hihell/category_12201825.html

华为OD详细说明:https://dream.blog.youkuaiyun.com/article/details/128980730

最长合法表达式

题目

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

  1. 所有数字,计算结果都不超过long
  2. 如果有多个长度一样的,请返回第一个表达式的结果
  3. 数学表达式,必须是最长的,合法的
  4. 操作符不能连续出现,如+--+1
<think>好的,我现在需要帮助用户查找华为OD前端JavaScript试题及解答。首先,我应该先回顾用户提供的引用内容,看看是否有直接相关的信息。 用户提供的引用包括五个来源,其中引用3和引用4提到了前端试题的内容。引用3描述了一个关于误码统计的问题,用户用哈希表处理索引数组,但测用例只过了90%。引用4是关于成绩排序的问题,输入人数、排序方式和成绩,输出排序后的结果。这两个都是具体的试题目示例,应该可以整理出来作为解答的一部分。 另外,引用5提到了华为OD22道试题的参考链接,但链接可能不可访问,不过可以建议用户参考该链接。其他引用如1、2涉及前端八股文,如块作用域和事件冒泡,可能与中的理论题相关,但用户主要关注的是编程题,所以重点放在引用3和4。 接下来,我需要按照用户的要求,用中文回答,结构清晰,分步骤解决问题。需要生成相关问题,并在回答中适当添加引用标识。同时,确保数学表达式使用正确的LaTeX格式,虽然当前问题可能不涉及太多数学内容,但要注意变量名如数组索引可能需要用$符号包裹,比如arr[i]。 用户可能希望得到具体的题目示例和解答,因此需要将引用3和4中的问题详细描述,并给出对应的JavaScript代码解决方案。此外,还需要提供备考建议,结合其他引用中的知识点,如块作用域、箭头函数、事件制等,这些可能在的理论部分出现。 需要注意的是,用户提到引用3中的测用例只过了90%,可能存在未考虑的边界情况,解答时应指出可能的优化点。此外,成绩排序问题需要考虑稳定排序和不同排序方式(升序/降序),代码中需要处理这些逻辑。 最后,生成的相关问题需要围绕准备、常见题型、理论知识点和优化方法展开,确保覆盖用户可能关心的其他方面。</think>根据现有资料,以下整理华为OD前端JavaScript相关真题及解答要点: --- ### 一、误码最短子串查找(哈希表应用) **题目要求**:在字符串中找出包含所有误码且长度最短的子串。误码定义为出现频率最高的字符,若多个则需分别计算[^3]。 **解决思路**: 1. 使用哈希表统计每个字符的索引位置,如: ```javascript const map = new Map(); for (let i = 0; i < s.length; i++) { if (!map.has(s[i])) map.set(s[i], []); map.get(s[i]).push(i); } ``` 2. 找出出现次数最多的字符集合(可能多个) 3. 对每个高频字符计算最小覆盖长度(如`maxIndex - minIndex + 1`) 4. 取所有结果中的最小值[^3] **边界问题**:需考虑字符出现位置为0或连续出现的情况(如`"aabbaa"`) --- ### 二、成绩排序问题(稳定排序) **题目要求**:输入多组姓名和成绩,按指定方式(升序/降序)排序输出[^4]。 **JavaScript实现**: ```javascript const readline = require('readline'); const rl = readline.createInterface({input: process.stdin}); let n, sortType; let data = []; let lineCount = 0; rl.on('line', (line) => { if (lineCount === 0) { n = parseInt(line); } else if (lineCount === 1) { sortType = parseInt(line); // 0升序,1降序 } else { const [name, score] = line.split(' '); data.push({name, score: parseInt(score)}); } lineCount++; }); rl.on('close', () => { data.sort((a, b) => { if (sortType === 0) { return a.score - b.score || data.indexOf(a) - data.indexOf(b); // 稳定排序 } else { return b.score - a.score || data.indexOf(a) - data.indexOf(b); } }); data.forEach(item => console.log(`${item.name} ${item.score}`)); }); ``` **关键点**:稳定排序需保留原始顺序(`indexOf`判断) --- ### 三、备考建议 1. **重点题型**:字符串处理(30%)、数组操作(25%)、排序算法(20%)、DOM/BOM相关(15%) 2. **高频考点**: - 块级作用域:`let/const`与`var`的区别[^1] - 事件制:捕获与冒泡的触发顺序[^2] - 箭头函数的`this`绑定特性 3. **资源参考**:优快云上的《华为OD22道试题》含JavaScript解法[^5] ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

梦想橡皮擦

如有帮助,来瓶可乐

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值