LeetCode——2325. 解密消息

news2024/10/10 12:25:49

一、题目

给你字符串 key 和 message ,分别表示一个加密密钥和一段加密消息。解密 message 的步骤如下:

使用 key 中 26 个英文小写字母第一次出现的顺序作为替换表中的字母 顺序 。
将替换表与普通英文字母表对齐,形成对照表。
按照对照表 替换 message 中的每个字母。
空格 ’ ’ 保持不变。
例如,key = “happy boy”(实际的加密密钥会包含字母表中每个字母 至少一次),据此,可以得到部分对照表(‘h’ -> ‘a’、‘a’ -> ‘b’、‘p’ -> ‘c’、‘y’ -> ‘d’、‘b’ -> ‘e’、‘o’ -> ‘f’)。
返回解密后的消息。
在这里插入图片描述
来源:力扣(LeetCode)
链接:https://leetcode.cn/problems/decode-the-message/description/

二、C解法

我的思路及代码

使用一个数组arr来存储字符之间的对应关系,大小为26的int类型(字符采用ASCII存储,所以用int就可以)。再使用一个index来存储当前对照到字母表哪一个字母了。遍历key,遇到小写字母且该字母之前没有被翻译过则直接减去’a’获取到该字母在字母表中的顺序,以此和arr中的下标对应起来,然后给该下标赋值index+‘a’,直到整个key都遍历完成。数组下标+'a’即是待翻译的字幕,数组内容即是翻译后的内容。

char * decodeMessage(char * key, char * message){
    int arr[26]={0};
    int index = 0;
    for(int i=0;key[i]!='\0';i++){
        if(key[i] == ' ') continue;
        if(index<26&&arr[key[i]-'a'] == 0){
            arr[key[i]-'a'] = index+'a';
            index++;
        }
    }
    for(int i=0;message[i]!='\0';i++){     
        if(message[i] == ' ') continue;
        message[i] = arr[message[i]-'a'];
    }

    return message;
}
  • 时间复杂度:O(m+n),其中 m 和 n 分别是字符串 key 和 message 的长度。
  • 空间复杂度:O(∣Σ∣)或者 O(n+∣Σ∣),其中 Σ是字符集,在本题中 ∣Σ∣=26。哈希表需要使用 O(∣Σ∣)的空间。此外,如果我们使用的语言不能对字符串进行修改,就需要额外 O(n) 的空间存储答案的临时表示;否则可以在给定的字符串 message 上进行修改。

官方参考代码

不如我的简单,随便看看

char * decodeMessage(char * key, char * message){
    char cur = 'a';
    char rules[26];
    memset(rules, 0, sizeof(rules));

    for (int i = 0; key[i] != '\0'; i++) {
        char c = key[i];
        if (c != ' ' && !rules[c - 'a']) {
            rules[c - 'a'] = cur;
            ++cur;
        }
    }

    for (int i = 0; message[i] != '\0'; i++) {
        char c = message[i];
        if (c != ' ') {
            message[i] = rules[c - 'a'];
        }
    }

    return message;
}
  • 时间复杂度:O(m+n),其中 m 和 n 分别是字符串 key 和 message 的长度。
  • 空间复杂度:O(∣Σ∣)或者 O(n+∣Σ∣),其中 Σ是字符集,在本题中 ∣Σ∣=26。哈希表需要使用 O(∣Σ∣)的空间。此外,如果我们使用的语言不能对字符串进行修改,就需要额外 O(n) 的空间存储答案的临时表示;否则可以在给定的字符串 message 上进行修改。

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

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

相关文章

vue全家桶(三)前端路由

vue全家桶&#xff08;三&#xff09;前端路由1.路由的概念1.1路由1.2vue Router2.vue-router的基本使用步骤2.1基本使用步骤2.2路由重定向3.vue-router的嵌套路由用法3.1嵌套路由的用法4.vue-router动态路由匹配用法5.vue-router命名路由用法6.vue-router编程式导航用法6.1 页…

06 Sentinel控制台规则配置讲解 (2)

1、实时监控 监控接口的通过的QPS和拒绝的QPS 2、簇点链路 用来显示微服务的所监控的API 3、流控规则 流量控制&#xff08;flow control&#xff09;&#xff0c;其原理是监控应用流量的 QPS 或并发线程数等指标&#xff0c;当达到指定的阈值时对流量进行控制&#xff0c;以…

源于《C陷阱与缺陷》----研究程序死循环问题

本题来源于《C陷阱与缺陷》这本书&#xff0c;从本质上讲解程序死循环的原因&#xff0c;关键在于栈的空间使用方式。研究程序死循环的原因死循环的原因是什么呢&#xff1f;解决方法总结研究程序死循环的原因 题目1&#xff1a; 在VS2019 X86环境下测试&#xff1a; int mai…

Linux服务器怎么设置iptables防火墙?

当今&#xff0c;为避免香港服务器及其端口受到恶意入侵&#xff0c;保障香港服务器的安全&#xff0c;配置Linux服务器防火墙的重要性不言而喻。恒创科技将向您介绍如何在 CentOS、Ubuntu 和 Debian 服务器中安装和配置 iptables防火墙。iptables是一个简单的防火墙&#xff0…

测试工程师必备技能之编写测试用例

1. 必要性 &#x1f449; 指导测试工作&#xff0c;用例通过率是评估质量的基准 &#x1f449; 完善测试人员测试的整体思路&#xff0c;不出现漏测 ❗️ 避免背锅&#xff0c;线上出了问题防止开发甩锅给测试 2. 模板 企业中用例往往是每个人负责不同模块&#xff0c;再根据…

Verilog实现超前进位加法器

在CPU等对性能要求较高的电路中&#xff0c;一般都会采用超前进位加法器&#xff0c;因为超前进位加法器的延时相对来说比较小。下面讲述超前进位加法器的原理&#xff1a; 我们知道&#xff0c;一个三输入&#xff0c;二输出的全加器&#xff0c;其逻辑关系为 SA⊕B⊕CinSA\op…

每日一练9——另类加法走方格的方案数

文章目录另类加法思路&#xff1a;代码&#xff1a;走方格的方案数思路&#xff1a;代码&#xff1a;另类加法 题目链接 思路&#xff1a; 本题可以通过位运算实现&#xff0c;具体实现如下&#xff1a; 两个数求和&#xff0c;其实就是 求和后当前位的数据两个数求和的进位…

Ceres Solver解算已知函数模型参数

一、介绍Ceres solver 是谷歌开发的一款用于非线性优化的库&#xff0c;在已知一个函数表达式&#xff0c;以及一组观测到的值&#xff0c;利用最小二乘是可以解算得到相关参数。下面举例使用ceres solver解算直线函数以及曲线函数参数。其过程包括三个步骤&#xff1a;&#x…

图为技术:专注核心技术 引领行业发展

图为技术T-3D引擎经过多年的技术积累与原始创新&#xff0c;作为国内首批基于分布式技术进行三维图形底层渲染的开拓者&#xff0c;不仅在渲染架构上优势明显&#xff0c;同时其所具备数据管理能力也十分卓越。分布式架构采用独创的(Multi Compute Server To Web Render)架构方…

Java多线程之CAS中的ABA问题与JUC的常见类

文章目录一. CAS指令与ABA问题1. 解析CAS2. 基于CAS实现的原子类3. 基于CAS实现自旋锁4. ABA问题二. JUC中的常见类1. Callable接口2. ReentrantLock类(可重入锁)3. Semaphore类(信号量)4. CountDownLatch同步工具类一. CAS指令与ABA问题 1. 解析CAS CAS即compare and awap, …

Cesium 坐标系的转换,空间数据加载 粒子系统加载

在vue中引入Cesium.js官网下载好的Cesium文件放入vue项目中index.html中引入,在js文件即可智能提示&#xff0c;或者下载依赖包也可<script src"./Cesium/Cesium.js"></script><link rel"stylesheet" href"./Cesium/Widgets/widgets.c…

若依配置教程(六)Excel导入功能实现

若依官网导入实现流程 文章目录一、前端index.vue中1.在所需模块的index.vue中的< script >< /script >中增加如下代码&#xff1a;2.在< template >< /template >中添加导入按钮事件&#xff1a;3.添加导入前端代码&#xff1a;二、在模块文件夹(ruoy…

数学建模学习笔记(17)灰色预测模型和神经网络

文章目录灰色预测模型相关基本概念GM(1,1)模型的使用步骤GM(1,1)模型的拓展模型GM(1,1)模型的注意事项BP神经网络预测模型的注意事项灰色预测模型 相关基本概念 系统的分类&#xff1a; 白色系统&#xff1a;系统的信息是完全明确的。灰色系统&#xff1a;系统的部分信息已知…

readelf指令使用

一、指令说明readelf命令&#xff0c;一般用于查看ELF格式的文件信息&#xff0c;常见的文件如在Linux上的可执行文件&#xff0c;动态库(*.so)或者静态库(*.a) 等包含ELF格式的文件。以下命令的使用是基于android编译出来的so文件上面去运行。readelf常用命令语法&#xff1a;…

视网膜电图特征可以检测成人的抑郁状态和治疗反应:一种机器学习方法

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 视网膜电图特征可以检测成人的抑郁状态和治疗反应&#xff1a;一种机器学习方法摘要1. 引言2. 方法和材料2.1 人口与伦理声明2.2 入选标准、临床和生物学评估2.3 实验方案2.4…

浅析代理IP与VPS

在跨境行业的热浪期&#xff0c;出海早已成为了企业发展的新趋势。像跨境电商&#xff0c;新媒体&#xff0c;旅游等行业都在开拓海外市场&#xff0c;越来越多的企业产生了匿名浏览互联网&#xff0c;隐藏真实IP的需求。能满足用户这一需求的方法有很多种&#xff0c;代理IP与…

H264/AVC 句法和语义--重要的字段、带截图

一 SPS、PPS句法和语义 宽高在SPS里。 profile_idc&#xff1a;baseline、main、high。 level_idc&#xff1a;值越大&#xff0c;最大宏块处理速率等值越大。 m_ptParam.i_level_idc 21; //X264编码参数 chroma_format_idc&#xff1a;1表示采样格式为4:2:0。 frame_mbs_onl…

C++ 树进阶系列之平衡二叉查找树( AVL)的自平衡算法

1. 前言 树的深度与性能的关系。 在二叉排序树上进行查找时&#xff0c;其时间复杂度理论上接近二分算法的时间复杂度O(logn)。 但是&#xff0c;这里有一个问题&#xff0c;如果数列中的数字顺序不一样时&#xff0c;构建出来的二叉排序树的深度会有差异性&#xff0c;对最…

【Unity VR开发】结合VRTK4.0:抛物线

模块化开发&#xff08;抛物线&#xff09;&#xff1a; 当我们用久了一个固定的东西之后就不想去追求新的东西&#xff0c;其实这是一种懒惰&#xff0c;每个人都应该明白&#xff0c;每一天&#xff0c;这个时间都在发生着变化&#xff0c;不管是人、事、物&#xff0c;而我…

[Android开发练习3] 四季图的切换

前言 本题主要涉及到使用帧式布局&#xff0c;以及如何为组件设置点击的事件响应&#xff0c;包括获取事件源&#xff0c;设置事件监听器&#xff0c;在Activity文件中书写一般的业务逻辑代码。 文章目录 布局代码 text3_season.xml&#xff08;layout&#xff09; style.xm…