LeetCode(String) 2325. Decode the Message

news2024/11/20 13:38:32

1.问题

You are given the strings key and message, which represent a cipher key and a secret message, respectively. The steps to decode message are as follows:

Use the first appearance of all 26 lowercase English letters in key as the order of the substitution table.
Align the substitution table with the regular English alphabet.
Each letter in message is then substituted using the table.
Spaces ’ ’ are transformed to themselves.

  • For example, given key = “happy boy” (actual key would have at least one instance of each letter in the alphabet), we have the partial substitution table of (‘h’ -> ‘a’, ‘a’ -> ‘b’, ‘p’ -> ‘c’, ‘y’ -> ‘d’, ‘b’ -> ‘e’, ‘o’ -> ‘f’).
    Return the decoded message.

**Example 1:
在这里插入图片描述

Input: key = “the quick brown fox jumps over the lazy dog”, message = “vkbs bs t suepuv”
Output: “this is a secret”
Explanation: The diagram above shows the substitution table.
It is obtained by taking the first appearance of each letter in “the quick brown fox jumps over the lazy dog”.

Example 2:
在这里插入图片描述

Input: key = “eljuxhpwnyrdgtqkviszcfmabo”, message = “zwx hnfx lqantp mnoeius ycgk vcnjrdb”
Output: “the five boxing wizards jump quickly”
Explanation: The diagram above shows the substitution table.
It is obtained by taking the first appearance of each letter in “eljuxhpwnyrdgtqkviszcfmabo”.

Constraints:

  • 26 <= key.length <= 2000
  • key consists of lowercase English letters and ’ '.
  • key contains every letter in the English alphabet (‘a’ to ‘z’) at least once.
  • 1 <= message.length <= 2000
  • message consists of lowercase English letters and ’ '.**

2.解题思路

方法1:

未使用hashmap的方式
1.新建返回值变量result,newk为key中26个未重复的字母,alp为26个字母
2.去掉key中的空格
3.遍历26个字母
4.去掉key中重复的元素,最后剩下26个字母,newk和alp的长度相等
5.遍历message的字符,如果和newk中的元素相等,在结果result中添加alp指定索引的元素,如果message的字符有空格,添加空格
6.返回result

方法2:

1.使用 String Builder 附加字符串
2.删除空格
3.将键映射到哈希表中,键的所有字母都将映射到它们各自的原始字母。利用map.containsKey()去掉重复的key
4.遍历元素,map.containsKey()去掉重复的message中的元素
如果message包含key的元素,result取出map的key对应的值
如果对于message字母以外的字符,空格添加到result中
5.返回ans的String类型

3.代码

代码1:

class Solution {
    public String decodeMessage(String key, String message) {
        String result ="";//1.新建返回值变量result,newk为key中26个未重复的字母,alp为26个字母
        String newk ="";
        String alp="";
        key = key.replace(" ", "");//2.去掉key中的空格
        for(char c='a';c<='z';++c){//3.遍历26个字母
            alp +=c;
        }
        for(int i =0;i<key.length();i++){//4.去掉key中重复的元素,最后剩下26个字母,newk和alp的长度相等
        //如果是用hashmap,hashmap不允许重复的键,利用这方法去掉键保存到map中
            if(newk.indexOf(key.charAt(i))<0){
                newk +=key.charAt(i);
            }
        }
        for(int z=0;z<message.length();z++){//5.遍历message的字符,如果和newk中的元素相等,在结果result中添加alp指定索引的元素,如果message的字符有空格,添加空格
          for(int e =0;e<newk.length();e++){
              if(message.charAt(z)==newk.charAt(e)){
                  result += alp.charAt(e) ;
              }
          }
            if(message.charAt(z)==' '){
                result +=' ';
            }
        }
        return result;//6.返回result
    }           
}

代码2:

class Solution {
    public String decodeMessage(String key, String message) {
        StringBuilder result = new StringBuilder();//1.使用 String Builder 附加字符串
        key = key.replaceAll(" ", "");//2.删除空格
        HashMap<Character,Character> map = new HashMap<>();
        //3.将键映射到哈希表中,键的所有字母都将映射到它们各自的原始字母。利用map.containsKey()去掉重复的key
        char alp = 'a';
        for (int i = 0; i < key.length() ; i++) {
            if (!map.containsKey(key.charAt(i))){
                map.put(key.charAt(i),alp++);
            }
        }
        //4.遍历元素,map.containsKey()去掉重复的message中的元素
        for (int i = 0; i < message.length(); i++) {
            if (map.containsKey(message.charAt(i))){
                //.如果message包含key的元素,result取出map的key对应的值,
                result.append(map.get(message.charAt(i)));
            }else{
                result.append(message.charAt(i));
                //.对于message字母以外的字符,空格添加到result中
            }
        }
        return result.toString();//5.返回result的String类型
    }
}

和代码2的解题思路相同

 class Solution {
    public String decodeMessage(String key, String message) {
     Map<Character, Character> map = new TreeMap<Character, Character>();
        char alp = 'a';
        for (char c : key.replaceAll(" ", "").toCharArray())
            if (!map.containsKey(c)) {
                map.put(c, alp);
                alp++;
            }

        StringBuilder result = new StringBuilder();

        for (char c : message.toCharArray()) {
            if (!Character.isWhitespace(c)) {
                result.append(map.get(c));
            } else {
                result.append(c);
            }
        }

        return result.toString();
    }
 }

代码3:

class Solution {
    public String decodeMessage(String key, String message) {
             Map<Character, Character> map = new HashMap<>();
        int alp = 97;//利用a的char的int为97,在map的value的值++,最后转换char格式
        for(char c : key.toCharArray()){//遍历key的值
            if(c == ' '){//如果为key不进行运算
                continue;
            }
            else{
                if(!map.containsKey(c)){//如果为key放入map中,利用map.containsKey()去重复的key
                    map.put(c, (char)alp);//在map的value的值++,最后转换char格式
                    alp++;
                }
            }
        }
        StringBuilder result = new StringBuilder();//使用 String Builder 附加字符串
        for(char c1 : message.toCharArray()){//
            if(c1 != ' '){
                result.append(map.get(c1));//如果message不为" ",添加元素,取出map的key对应的值
            }
            else{
                result.append(" ");//如果message为" ",添加" "
            }
        }
        return result.toString();//返回String类型
    }
}

和代码3的解题思路相同

class Solution {
    public String decodeMessage(String key, String message) {
                HashMap<Character,Character> map = new HashMap<>();
        char alp = 'a';
        for(int i = 0 ; i < key.length() ; i ++){
            if(key.charAt(i) == ' '){
                continue;
            }
            if(!map.containsKey(key.charAt(i))){
                map.put(key.charAt(i),alp++);
            }
        }
        String result = "";
        for(int i = 0; i < message.length(); i++){
            if(message.charAt(i) == ' '){
                result = result + " ";
            }else{
                result = result + map.get(message.charAt(i));
            }
        }
        return result;
    }
    }
}

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

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

相关文章

React生命周期详解

React 类组件生命周期 React 有两个重要阶段 render 阶段和 commit 阶段&#xff0c;React 在调和( render )阶段会深度遍历 React fiber 树&#xff0c;目的就是发现不同( diff )&#xff0c;不同的地方就是接下来需要更新的地方&#xff0c;对于变化的组件&#xff0c;就会执…

Linux杂谈之java命令

一 java &#xff08;1&#xff09;基本解读 ① JAVA8 官方命令行参数 linux版的java 重点关注&#xff1a; java、javac、jar、keytool 这三个参数学习方式&#xff1a; 通过man java和官方文档快速学习 如何在官网搜索 java的命令行参数用法 ② 语法格式 ③ 描述 1)…

Java开发为何深入人心 ?我来带你解开 Spring、IoC、DI 的秘密~

目录 一、什么是Spring? 1.1、什么是容器&#xff1f; 1.2、IoC是什么&#xff1f; 1.3、IoC带来了什么好处&#xff1f; 二、什么是DI&#xff1f; 2.1、IoC和DI有什么关系&#xff1f; 一、什么是Spring? 一句概括&#xff0c;Spring 是包含了众多⼯具⽅法的 IoC 容器…

RHCE第七天之防火墙详解

文章目录一、 基本概念二、iptables三、firewalld四、实验练习一、 基本概念 什么是防火墙&#xff1f;路由策略和策略路由/ipsec vpn gre hdlc ppp 硬件 iDS 在计算中&#xff0c;防火墙是基于预定安全规则来监视和控制传入和传出网络流量的网络安全系统。该计算机流入流出的…

React基础梳理,万字总结,总能帮到你~

第1章&#xff1a;React入门 1.1.React简介 1.英文官网: reactjs.org/2.中文官网: react.docschina.org/3.用于动态构建用户界面的 JavaScript 库(只关注于视图)4.Facebook开源 React的特点 1.声明式编码2.组件化编码3.React Native 编写原生应用4.高效&#xff08;优秀的D…

CodeCraft-22 and Codeforces Round #795 (Div. 2)

A. Beat The Odds 题目链接&#xff1a; Problem - A - Codeforces 样例输入&#xff1a; 2 5 2 4 3 6 8 6 3 5 9 7 1 3样例输出&#xff1a; 1 0题意&#xff1a;给定一个长度为n的数组&#xff0c;我们可以对这个数组进行操作&#xff0c;每次操作可以删除一个数&#xff…

计算机防勒索病毒之系统主机加固篇

​ 近年来&#xff0c;计算机以及互联网应用在中国得到普及和发展&#xff0c;已经深入到社会每个角落&#xff0c;政府&#xff0c;经济&#xff0c;军事&#xff0c;社会&#xff0c;文化和人们生活等各方面都越来越依赖于计算机和网络&#xff0c;电子政务&#xff0c;无纸办…

如何把WPS转换成PDF格式?新手也能轻松学会的方法

WPS文件是我们工作中必不可少的&#xff0c;它可以编辑文本、记录数据、展示文档等等&#xff0c;都能更好的帮我们处理工作&#xff0c;不过有的时候WPS文件在不同设备上打开可能会出现格式错误或者乱码等一系列的问题&#xff0c;这时候我们就可以将WPS文件转换成PDF文件&…

[Leetcode] 传递信息(有向图路径)

小朋友 A 在和 ta 的小伙伴们玩传信息游戏&#xff0c;游戏规则如下&#xff1a;有 n 名玩家&#xff0c;所有玩家编号分别为 0 &#xff5e; n-1&#xff0c;其中小朋友 A 的编号为 0每个玩家都有固定的若干个可传信息的其他玩家&#xff08;也可能没有&#xff09;。传信息的…

Python数据分析之Pandas

文章目录前言一、输入输出1.1 txt1.2 csv1.3 excel1.4 json1.5 sql1.6 html1.7 latex二、数据结构2.1 一维数据 Series2.2 二维数据 DataFrame2.2.1 数据查看2.2.2 数据遍历2.2.3 数据选取2.2.4 数据处理2.2.5 数据统计2.3 索引对象 Index2.4 时间戳 TimeStamp三、窗口函数3.1 …

【每日一题】【LeetCode】【第十天】只出现一次的数字

解决之路 题目描述 测试案例&#xff08;部分&#xff09; 第一次 和昨天的题目有点类似&#xff0c;昨天是找重复&#xff0c;今天是找不重复。那直接按昨天第二次思路来写这次的代码。 class Solution(object):def singleNumber(self, nums):nums.sort()for i in range(l…

在线计算lncRNA-mRNA共表达相关系数,并使用cytoscape绘制共表达网络图

长链非编码RNA(Long noncoding RNA)是一类长度大于200 nt&#xff0c;不编码蛋白质的RNA。LncRNA的功能多样&#xff0c;如图1所示&#xff0c;A&#xff1a;充当蛋白质和染色质的连接因子&#xff0c;引起染色质重构&#xff08;chromatin remodeling&#xff09;&#xff1b;…

内存函数细节及实现

1、memcpy内存拷贝 不仅可以拷贝&#xff0c;还可以拷贝整型、结构体等&#xff0c;因为直接拷贝了内存。 因为不知道要拷贝的类型是什么&#xff0c;所以都用void*来接收。num是拷贝的字节数 拷贝时可任意选择dest&#xff0c;src&#xff0c;以及字节数。返回void*类型的指…

01什么是FPGA?

FPGA 是一种硬件可重构的体系结构。它的英文全称是Field Programmable Gate Array&#xff0c;中文名是现场可编程门阵列。 FPGA就是一个可以通过编程来改变内部结构的芯片&#xff0c;FPGA常年来被用作专用芯片&#xff08;ASIC&#xff09;的小批量替代品&#xff0c; 同时也…

PMP考试流程是怎么样的?

别的问题我可能不太了解&#xff0c;但考试流程我绝对是非常清楚了&#xff01;话不多说&#xff0c;直接放流程给到大家&#xff0c;好歹通过考试了&#xff0c;基本的情况还是能给大家讲解一下的。希望能够给有需要的同学提供点帮助。 先把考试的流程看仔细了&#xff0c;之…

核心乐理---音程名称

定义 音程是连个音之间的距离&#xff0c;是音乐中的距离&#xff0c;可以便于我们描述音符间的距离&#xff0c;便于与他人进行沟通交流。 就好像是厘米&#xff0c;米这些这些物理中的长度单位一样 度 度是音程的单位。 从一个音的名字念到另一个音的名字&#xff0c;一共念…

瑞幸“复制”拼多多

&#xff08;图片来源于网络&#xff0c;侵删&#xff09; 来源 | 螳螂观察 文 | 叶小安 在电商界&#xff0c;拼多多杀出阿里京东围剿重围&#xff0c;奠定现今电商行业“猫狗拼”三分天下的格局&#xff0c;这是多少后辈们参考的范本。 在咖啡界&#xff0c;瑞幸凭借低价…

ESP32基于Arduino框架,SD卡+MAX98357模块+MP3播放器

ESP32基于Arduino框架&#xff0c;SD卡MAX98357模块MP3播放器&#x1f3ac;原创作者的制作教程讲解以及源码&#xff1a; 35 ESP32之简单的完整功能SD卡MP3播放器的制作讲解&#xff08;ESP32-audioI2S库介绍&#xff09;- 基于Arduino链接&#xff1a;https://pan.baidu.com/s…

黑产系列02-黑产画像

黑产无利不起早&#xff0c;在利益的驱动下黑产几乎是屡禁不止&#xff0c;作为风控从业人员我们需要全方位的了解黑产&#xff0c;了解我们的对手&#xff0c;才能知己知彼&#xff0c;接下来我将结合我多年风控经验以及查阅的相关的资源&#xff0c;全方位介绍下黑产以及他们…

matplot绘制动图

import matplotlib.pyplot as plt from matplotlib.animation import FuncAnimation import numpy as np plt.rcParams[axes.unicode_minus] False plt.rcParams[font.sans-serif] SimHei# 准备数据 x np.linspace(0,3*np.pi,100) y1 np.sin(x) y2 np.cos(x)#创建画布和子图 …