【LeetCode】 解密消息 Java 题解
题目描述
给你字符串 key 和 message ,分别表示一个加密密钥和一段加密消息。解密 message 的步骤如下:
使用 key 中 26 个英文小写字母第一次出现的顺序作为替换表中的字母 顺序 。将替换表与普通英文字母表对齐,形成对照表。按照对照表 替换 message 中的每个字母。空格 ' ' 保持不变。例如,key = "happy boy"(实际的加密密钥会包含字母表中每个字母 至少一次),据此,可以得到部分对照表('h' -> 'a'、'a' -> 'b'、'p' -> 'c'、'y' -> 'd'、'b' -> 'e'、'o' -> 'f')。返回解密后的消息。
思路分析
今天的算法题目是加解密问题。在信息安全方面,应用广泛。题目自定义了一种加解密算法。是英文字母的对应关系。
密钥是一种参数,它是在明文转换为密文或将密文转换为明文的算法中输入的参数。题目核心是使用 key 中 26 个英文小写字母第一次出现的顺序作为替换表中的字母 顺序。
我们采用 hashMap 这种数据,记录 key 中英文字符的对应关系和判断是否已经存在了英文字符的对应关系。按照题目定义的规则,实现代码即可。
在构建返回值的时候,使用了 StringBuffer 类,StringBuilder 上的主要操作是 append 和 insert 方法,它们被重载以便接受任何类型的数据。 每个都有效地将给定的数据转换为字符串,然后将该字符串的字符追加或插入到字符串构建器中。 append 方法始终在构建器的末尾添加这些字符; insert 方法在指定点添加字符。
StringBuilder 实例不适合多线程使用。 如果需要这样的同步,则建议使用 StringBuffer 。具体实现代码如下,供参考。
通过代码
总结
上述算法的时间复杂度是 O(n),空间复杂度是 O(n)
坚持算法每日一题,加油!
版权声明: 本文为 InfoQ 作者【Albert】的原创文章。
原文链接:【http://xie.infoq.cn/article/50fd9fb0d431722a54e5bc2a2】。文章转载请联系作者。
评论