华为OD机试真题 JavaScript 实现【一种字符串压缩表示的解压】【2022Q4 100分】,附详细解题思路

news2024/11/15 13:31:48

在这里插入图片描述

一、题目描述

有一种简易压缩算法:针对全部由小写英文字母组成的字符串,将其中连续超过两个相同字母的部分压缩为连续个数加该字母,其他部分保持原样不变。例如:字符串“aaabbccccd”经过压缩成为字符串“3abb4cd”。
请您编写解压函数,根据输入的字符串,判断其是否为合法压缩过的字符串,若输入合法则输出解压缩后的字符串,否则输出字符串“!error”来报告错误。

二、输入描述

输入一行,为一个ASCII字符串,长度不会超过100字符,用例保证输出的字符串长度也不会超过100字符。

三、输出描述

若判断输入为合法的经过压缩后的字符串,则输出压缩前的字符串;若输入不合法,则输出字符串“!error”。

四、解题思路

  1. 读取输入的字符串;
  2. 检查字符串的最后一个字符是否为数字,如果是数字则表示输入不合法,输出"!error";
  3. 使用StringBuilder sb 初始化一个空字符串用于存储解压缩后的结果;
  4. 使用正则表达式将字符串分割为两个数组:strArr 存储连续相同字母的部分,numArr 存储连续个数;
  5. 遍历 strArr 数组,对于每个连续相同字母的部分 item:
    • 如果 item 的长度大于等于3,说明存在连续超过两个相同字母的部分,输入不合法,输出"!error";
    • 将 item 添加到 sb 中;
    • 如果当前位置 i 小于 strArr 数组的长度减1,表示还有下一个连续相同字母的部分:
      • 获取下一个连续相同字母的部分 next;
      • 如果当前位置 i 小于等于 numArr 数组的长度减1,表示还有下一个连续个数:
        • 将 numArr 数组中对应位置的数字转换为整数 num;
        • 获取 next 的第一个字符 c;
        • 将 c 重复 num-1 次添加到 sb 中;
  6. 输出 sb 的字符串表示解压缩后的结果;

五、JavaScript算法源码

function calculate(compressedStr) {
    const length = compressedStr.length;

    // 如果是数字则表示输入不合法
    if (/\d$/.test(compressedStr)) {
        return '!error';
    }

    let result = '';
    // 存储连续相同字母的部分
    const numArr = compressedStr.split(/\d+/);
    // 存储连续个数
    const strArr = compressedStr.split(/[a-z]+/);

    for (let i = 0; i < numArr.length; i++) {
        const item = numArr[i];
        // 如果 item 的长度大于等于3,说明存在连续超过两个相同字母的部分
        if (item.length >= 3) {
            for (let j = 0; j < item.length - 2; j++) {
                if (item[j] === item[j + 1] && item[j] === item[j + 2]) {
                    return '!error';
                }
            }
        }

        // 将 item 添加到 sb 中
        result += item;

        // 表示还有下一个连续相同字母的部分
        if (i < numArr.length - 1) {
            const next = numArr[i + 1];
            if (i <= strArr.length - 1) {
                const num = parseInt(strArr[i], 10);
                const c = next.charAt(0);
                result += c.repeat(num - 1);
            }
        }
    }

    return result;
}

六、效果展示

在这里插入图片描述


🏆下一篇:华为OD机试真题 JavaScript 实现【相对开音节】【2022Q4 100分】,附详细解题思路

🏆本文收录于,华为OD机试(JavaScript)真题(A卷+B卷)

每一题都有详细的答题思路、详细的代码注释、样例测试,订阅后,专栏内的文章都可看,可加入华为OD刷题群(私信即可),发现新题目,随时更新,全天CSDN在线答疑。

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/635274.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

shell脚本学习记录(重定向)

Shell 输入/输出重定向 大多数 UNIX 系统命令从你的终端接受输入并将所产生的输出发送回​​到您的终端。 输出重定向 重定向一般通过在命令间插入特定的符号来实现。特别的&#xff0c;这些符号的语法如下所示: command1 > file1 上面这个命令执行command1然后将输出的…

maven访问仓库的顺序

1.没有配置私服的情况下&#xff08;大部分情况下&#xff09; 如上图所示&#xff0c;maven是依次从本地仓库、中央仓库和第三方仓库获取依赖的&#xff0c;其实在maven中并不是以这三种类型区分的&#xff0c;在maven中只有两种仓库类型&#xff0c;本地仓库和远程仓库&#…

Systemverilog中的Driving Strength讲解

在systemverilog中&#xff0c;net用于对电路中连线进行建模&#xff0c;driving strength(驱动强度)可以让net变量值的建模更加精确。net变量拥有4态逻辑值(0,1,z,x)&#xff0c;它的driving strength有(supply,strong,pull,weak,highz)。net的值由连接到net的driver源(驱动源…

【开源工具】使用Whisper将提取视频、语音的字幕

这里写目录标题 一、语音转字幕操作步骤1、下载安装包Assets\WhisperDesktop.zip[^2]2、加载模型2.1 下载模型2.1.1 进入Hugging Face[^3]的仓库2.1.2 选择需要下载的模型2.1.3 配置模型路径 3、语音转字幕4、实时语言转录功能 二、相关简介[^1]特点开发人员指南构建说明其他注…

模拟退火(SA)算法

目录 模拟退火算法 主要代码 Mutate Sphere 模拟退火算法 主要代码 repmat 重复数组副本 B repmat(A,n) 返回一个数组&#xff0c;该数组在其行维度和列维度包含 A 的 n 个副本。A 为矩阵时&#xff0c;B 大小为 size(A)*n。 unifrnd 生成连续统一的随机数 sort 对数组进行…

抖音百科词条创建在哪里?

抖音作为中国火爆的短视频平台&#xff0c;拥有相当庞大的用户群体&#xff0c;用户在抖音上创建百科词条就可以获得非常可观的曝光和展现&#xff0c;抖音百科词条是通过哪种方式创建的呢&#xff1f;想要创建一个抖音百科怎么做&#xff1f;接下来伯乐网络传媒就来给大家讲一…

Linux之进程信号(上)

文章目录 前言一、进程信号二、查看命令kill -l与信号解释man 7 signal1.kill -l2.man 7 signal 三、信号的产生1.按键ctrl cctrl zctrl \ 2.系统调用kill——向任意进程发送信号raise——进程给自己发送任意信号abort——进程给自己指定的信号&#xff08;6号信号&#xff…

主流解压缩软件有哪些?这四款可以满足你的所有需求

作者&#xff1a;Insist-- 个人主页&#xff1a;insist--个人主页 作者会持续更新网络知识和python基础知识&#xff0c;期待你的关注 目录 第一款&#xff1a;bandizip&#xff08;推荐&#xff09; 第二款&#xff1a;7-zip 第三款&#xff1a;Nanazip 第四款&#xff1a…

Vue中如何进行表单自定义验证

Vue中如何进行表单自定义验证 在Vue应用中&#xff0c;表单验证是非常重要的一部分。Vue提供了一些内置的验证规则&#xff0c;比如required、min、max等。但是有时候我们需要对表单进行自定义验证&#xff0c;以满足特定的业务需求。本文将介绍如何在Vue中进行表单自定义验证…

第十章 数学相关

第十章 数学相关 第一节 集合 真题&#xff08;2010-53&#xff09;-数学相关-集合-画饼集能力-朴素逻辑 53.参加某国际学术研讨会的 60 名学者中&#xff0c;亚裔学者 31 人&#xff0c;博士 33 人&#xff0c;非亚裔学者中无博士学位的 4 人。根据上述陈述&#xff0c;参…

Java16:集合

一&#xff1a;Collecction接口 1.单列集合框架结构 》Collection接口&#xff1a;单列集合&#xff0c;用来存储一个一个的对象 》 List接口&#xff1a;存储有序的&#xff0c;可重复的数据---》动态数组&#xff0c;实现类&#xff1a;ArrayList&#xff0c;LinkedList,…

【深蓝学院】手写VIO第3章--基于优化的 IMU 与视觉信息融合--作业

0. 题目 1. T1 T1.1 绘制阻尼因子曲线 将尝试次数和lambda保存为csv&#xff0c;绘制成曲线如下图 iter, lambda 1, 0.002000 2, 0.008000 3, 0.064000 4, 1.024000 5, 32.768000 6, 2097.152000 7, 699.050667 8, 1398.101333 9, 5592.405333 10, 1864.135111 11, 1242.7567…

【书影观后感 十四】左晖-做难而正确的事

距离上一本完整读完的书《李自成》及据此而作的读后感【书影观后感 十三】甲申三百七十八年祭已经接近一年时间了&#xff0c;最近心血来潮读了李翔的访谈形式系列《详谈》的第一本《左晖-做难而正确的事》。 虽然这本薄薄的书只有171页&#xff0c;访谈的形式也看似比较随意…

因果推断18--估计个体治疗效果:泛化界和算法CRF(个人笔记)

目录 1. 介绍 2. 相关工作 3.估计ITE&#xff1a;误差界 4. 估计ITE的算法 5.实验 5.1. 模拟结果&#xff1a;IHDP 5.2. 现实世界的结果&#xff1a;工作 5.3. 结果 6.结论 参考 英文题目&#xff1a;Estimating individual treatment effect: generalization bounds…

【Python plotly】零基础也能轻松掌握的学习路线与参考资料

Python plotly是一个优秀的数据可视化工具&#xff0c;通过使用Python语言和Plotly的图表支持库&#xff0c;可以轻松地创建交互式和动态图表&#xff0c;Python plotly的可视化效果美观且易于实现。 学习路线&#xff1a; Python基础语法和Numpy、Pandas基础学习 Python是一…

碳排放预测模型 | Python实现基于LSTM长短期记忆神经网络的碳排放预测模型(预测未来发展趋势)

文章目录 效果一览文章概述研究内容环境准备源码设计学习总结参考资料效果一览 文章概述 碳排放预测模型 | Python实现基于LSTM长短期记忆神经网络的碳排放预测模型(预测未来发展趋势) 研究内容 这是数据集的链接:https://github.com/owid/co2-data/blob/master/owid-co2-da…

windows一键安装redis3.2.100

下载 下载地址:https://gitcode.net/zengliguang/windows_redis_offline_install.git 使用git进行进行clone下载 在电脑桌面或者其他文件夹下 &#xff0c;鼠标右键点击 选择git clone &#xff0c;下图中url为下载地址&#xff0c;Directory为本地存储路径&#xff0c;点击…

ORB_SLAM3 闭环检测

ORB SLAM3系统初始化ORB SLAM3 构建FrameORB_SLAM3 单目初始化ORB_SLAM3 双目匹配ORB_SLAM3_IMU预积分理论推导(预积分项)ORB_SLAM3_IMU预积分理论推导(噪声分析)ORB_SLAM3_IMU预积分理论推导(更新)ORB_SLAM3_IMU预积分理论推导(残差)ORB_SLAM3_优化方法 Pose优化ORB_SLAM3 闭环…

【量化交易笔记】8.基于深度学习(LSTM)预测股票价格

前言 前一章节&#xff0c;已作随机森林来预测股票价格&#xff0c;也是一种比较常见的方法&#xff0c;本章基于深度学习算法来处理时间序列&#xff0c;来预测股票未来的价格。LSTM是一种特殊类型的循环神经网络&#xff08;RNN&#xff09;&#xff0c;在自然语言处理和时间…

【C语言之函数栈帧】(动态图—巨细)一文带你了解局部变量随机值及栈区上的函数调用

&#x1f6a9;纸上得来终觉浅&#xff0c; 绝知此事要躬行。 &#x1f31f;主页&#xff1a;June-Frost &#x1f680;专栏&#xff1a;C语言 局部变量为什么是随机值?函数是如何调用的&#xff1f; ✉️ 该篇将使用该编译器&#xff0c;通过介绍栈帧的创建和销毁来深入了解局…