news 2026/5/9 9:33:30

千问 LeetCode 2227. 加密解密字符串 public int decrypt(String word2)

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
千问 LeetCode 2227. 加密解密字符串 public int decrypt(String word2)

这道题的难点在于**解密(Decrypt)**的过程。

如果直接按照题目描述的逻辑去写decrypt函数(即:把字符串切分成两个字符一组,然后尝试所有可能的组合),你会发现这是一个非常耗时的回溯过程,因为一个密文可能对应多个明文。

核心解题思路是“逆向思维” + “预处理”
我们不需要真的去把密文还原成明文,而是反过来思考:统计字典(dictionary)中所有单词加密后的样子

  1. 在初始化时,就把dictionary里的每个单词都加密。
  2. 用哈希表(HashMap)记录:加密后的字符串->出现的次数
  3. 当调用decrypt(word2)时,只需要在哈希表中查找word2出现了几次即可。这样时间复杂度降为 O(1)。

下面是完整的 Java 代码实现:

💻 Java 代码实现

importjava.util.*;classEncrypter{// 存储字符到字符串的映射 (用于加密)privateMap<Character,String>encryptMap;// 存储 "加密后的字符串" -> "在字典中出现的次数" (用于解密)privateMap<String,Integer>decryptCountMap;publicEncrypter(char[]keys,String[]values,String[]dictionary){this.encryptMap=newHashMap<>();this.decryptCountMap=newHashMap<>();// 1. 构建加密映射表for(inti=0;i<keys.length;i++){encryptMap.put(keys[i],values[i]);}// 2. 【关键步骤】预处理字典// 我们不存原始字典,而是存“字典中单词加密后”的结果及其频次for(Stringword:dictionary){StringencryptedWord=encrypt(word);// 只有当加密成功(不为空)时才统计if(encryptedWord!=null){decryptCountMap.put(encryptedWord,decryptCountMap.getOrDefault(encryptedWord,0)+1);}}}publicStringencrypt(Stringword1){StringBuildersb=newStringBuilder();for(charc:word1.toCharArray()){// 如果字符不在 keys 中,无法加密,返回空字符串if(!encryptMap.containsKey(c)){return"";}sb.append(encryptMap.get(c));}returnsb.toString();}publicintdecrypt(Stringword2){// 直接在预处理好的哈希表中查找// 如果没有找到,说明没有字典中的单词能加密成 word2,返回 0returndecryptCountMap.getOrDefault(word2,0);}}

💡 关键点解析

1. 为什么这样做?

题目中的decrypt实际上是问:“这个密文word2可能是字典里的哪几个词变来的?”。
如果我们正向解密,比如密文ei可能对应a也可能对应c,组合起来可能性呈指数级增长。
通过预先计算字典中所有合法单词的加密结果,我们将复杂的“多对多”解密问题转化为了简单的“查表”问题。

2. 数据结构的选择
  • encryptMap(Map<Character, String>): 用来快速查找某个字符应该变成哪两个字符。
  • decryptCountMap(Map<String, Integer>): 这是优化的核心。键是加密后的长字符串,值是该字符串在字典中对应的原词数量。
3. 边界情况处理
  • encrypt方法中,如果遇到keys中不存在的字符,根据题目逻辑应返回空字符串""
  • 在初始化统计字典时,也要排除掉那些包含非法字符(无法加密)的字典单词。
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/5/9 9:29:03

GTA5线上小助手:免费开源的游戏增强工具终极指南

GTA5线上小助手&#xff1a;免费开源的游戏增强工具终极指南 【免费下载链接】GTA5OnlineTools GTA5线上小助手 项目地址: https://gitcode.com/gh_mirrors/gt/GTA5OnlineTools GTA5线上小助手是一款专为《侠盗猎车手5》线上模式开发的免费开源辅助工具&#xff0c;它能…

作者头像 李华
网站建设 2026/5/9 9:22:27

oh-my-gemini-cli:命令行集成多模态AI,提升开发与运维效率

1. 项目概述&#xff1a;当命令行遇上多模态大模型如果你和我一样&#xff0c;是个重度命令行用户&#xff0c;同时又对AI助手有高频需求&#xff0c;那么你肯定经历过这样的场景&#xff1a;想快速让AI分析一张截图里的文字、总结一个PDF文档的核心观点&#xff0c;或者把一段…

作者头像 李华
网站建设 2026/5/9 9:21:40

通过 curl 命令快速测试 Taotoken 各模型接口是否通畅

&#x1f680; 告别海外账号与网络限制&#xff01;稳定直连全球优质大模型&#xff0c;限时半价接入中。 &#x1f449; 点击领取海量免费额度 通过 curl 命令快速测试 Taotoken 各模型接口是否通畅 在将大模型集成到应用或进行服务部署前&#xff0c;验证 API 接口的连通性是…

作者头像 李华
网站建设 2026/5/9 9:20:55

自动化测试(六) API性能测试-JMeter脚本化与Gatling代码化双方案

API性能测试&#xff1a;JMeter脚本化与Gatling代码化双方案前面咱们搞定了功能测试&#xff0c;但接口能跑通不代表能扛住流量。今天聊性能测试——JMeter和Gatling两个主流工具&#xff0c;什么时候用哪个&#xff1f;怎么设计压测场景&#xff1f;一、性能测试不是"把并…

作者头像 李华
网站建设 2026/5/9 9:17:40

【YOLO目标检测全栈实战专栏】04 模型压缩与量化:把YOLOv8塞进边缘设备的“瘦身秘籍”

还记得上周在客户现场,我盯着那块Jetson Nano开发板直冒冷汗。客户要求用YOLOv8做实时口罩检测,我自信满满地部署了训练好的模型——结果呢? FPS只有3.2,画面卡得像PPT。客户总监站在旁边,眉头越皱越紧,我恨不得把模型塞进微波炉里“加热”一下让它跑快点。 那一刻我意…

作者头像 李华