华为OD机试2025C卷-字符串加密[100分]( Java _ Python3 _ C++ _ C语言 _ JsNode _ Go)实现100%通过率 个人主页深夜coding算法 专栏系列2026年华为最新OD机试题库详解 一次订阅永久解锁 | 持续更新100篇 | 6语言全覆盖文章目录❄️前言☀️一题目描述 题目名称 题目内容 输入描述 输出描述 示例☀️二解题思路☀️三代码实现CJavaPython3C语言JavaScriptGo☀️四复杂度分析⭐ 五易错点坑1密钥去重坑2映射方向共勉❄️前言字符串加密这题看着唬人实则就是个映射表。题目会定义一种加密规则通常是移位或替换把原文每个字符过一遍规则就完事。如果你刷过力扣的简单字符串题这种就是送分题。☀️一题目描述 题目名称字符串加密 题目内容有一种技巧可以对数据进行加密它使用一个单词作为它的密钥。下面是它的工作原理首先选择一个单词作为密钥比如TRAILBLAZERS。如果单词中包含有重复的字母只保留第一个其余丢弃。现在获得的新密钥如下T R A I L B Z E S。然后用密钥中的字母构造一个加密映射表密钥字母按顺序放入映射表头部后面按字母表顺序填补未出现的字母A-Z最终映射关系原文的 A-Z 依次对应映射表中的 A-Z 位置字母。给定密钥和原文输出密文。 输入描述输入两行第一行密钥大写字母组成的单词第二行需要加密的原文大写字母字符串 输出描述输出加密后的密文字符串。 示例输入 TRAILBLAZERS ATTACKATDAWN 输出 TPPTADTPISVN☀️二解题思路密钥去重遍历密钥用bool used[26]标记只保留首次出现的字母构造映射表密钥去重字母 剩余未出现的字母A-Z依次补全加密原文每个字母c密文 映射表[c - A]☀️三代码实现C#includeiostream#includestringusingnamespacestd;intmain(){string key,plain;getline(cin,key);getline(cin,plain);boolused[26]{false};string table;for(charc:key)if(!used[c-A]){used[c-A]true;tablec;}for(inti0;i26;i)if(!used[i])table(char)(Ai);for(charc:plain)couttable[c-A];coutendl;}Javaimportjava.util.Scanner;publicclassMain{publicstaticvoidmain(String[]args){ScannerscnewScanner(System.in);Stringkeysc.nextLine(),plainsc.nextLine();boolean[]usednewboolean[26];StringBuildertablenewStringBuilder();for(charc:key.toCharArray())if(!used[c-A]){used[c-A]true;table.append(c);}for(inti0;i26;i)if(!used[i])table.append((char)(Ai));for(charc:plain.toCharArray())System.out.print(table.charAt(c-A));System.out.println();}}Python3keyinput().strip()plaininput().strip()used[False]*26table[]forcinkey:idxord(c)-65ifnotused[idx]:used[idx]Truetable.append(c)foriinrange(26):ifnotused[i]:table.append(chr(65i))forcinplain:print(table[ord(c)-65],end)print()C语言#includestdio.h#includestring.hintmain(){charkey[128],plain[1024],table[27];intused[26]{0},tlen0;gets(key);gets(plain);for(char*pkey;*p;p)if(!used[*p-A]){used[*p-A]1;table[tlen]*p;}for(inti0;i26;i)if(!used[i])table[tlen]Ai;table[26]\0;for(char*pplain;*p;p)printf(%c,table[*p-A]);printf(\n);}JavaScriptconstlinesrequire(fs).readFileSync(0,utf-8).trim().split(\n);constkeylines[0],plainlines[1];constusedArray(26).fill(false);consttable[];for(constcofkey)if(!used[c.charCodeAt(0)-65]){used[c.charCodeAt(0)-65]true;table.push(c);}for(leti0;i26;i)if(!used[i])table.push(String.fromCharCode(65i));console.log([...plain].map(ctable[c.charCodeAt(0)-65]).join());Gopackagemainimport(fmt;bufio;os;strings)funcmain(){scanner:bufio.NewScanner(os.Stdin)scanner.Scan();key:scanner.Text()scanner.Scan();plain:scanner.Text()used:[26]bool{}table:[]byte{}for_,c:rangekey{if!used[c-A]{used[c-A]true;tableappend(table,byte(c))}}fori:0;i26;i{if!used[i]{tableappend(table,byte(Ai))}}varsb strings.Builderfor_,c:rangeplain{sb.WriteByte(table[c-A])}fmt.Println(sb.String())}☀️四复杂度分析指标数值时间复杂度O(N)空间复杂度O(26) O(1)⭐ 五易错点坑1密钥去重只保留首次出现的字母后面的重复字母丢弃。坑2映射方向原文→映射表找下标→输出映射表中对应的字母。不是原文字母本身在字母表中的偏移。共勉构造映射表一行一个字符地查表输出。OD 字符串题考的不是智商是细心。关于本专栏一次订阅永久解锁全部100篇真题详解6语言全覆盖Java | Python3 | C | C语言 | JsNode | Go