1. 题目
读题
这道题的意思是让您使用一种加密技巧,把一个字符串转换成另一个字符串。
这种加密技巧的原理是这样的:
- 首先,您需要选择一个单词作为密钥,比如TRAILBLAZERS。
- 然后,您需要把这个单词中重复的字母去掉,只保留第一个出现的字母,比如TRAILBZES。
- 接着,您需要把这个单词放在字母表的下面,然后用剩下的字母按照顺序填充完整,比如:
A B C D E F G H I J K L M N O P Q R S T U V W X Y Z
T R A I L B Z E S C D F G H J K M N O P Q U V W X Y
- 最后,您需要把要加密的字符串中的每个字母用上面对应的字母替换,注意保持大小写不变,比如:
Attack AT DAWN -> Tpptad TP ITVH
nihao ni -> le
考查点
2. 解法
思路
代码逻辑
具体实现
import java.util.*; public class Main{ // 定义一个函数,根据密钥生成新字母表 public static char[] createNewKey(String key){ char[] keys=new char[26]; int index=0; for(char c:key.toCharArray()){ if(!contains(keys,c)){ keys[index++]=c; } } for(char c:'ABCDEFGHIJKLMNOPQRSTUVWXYZ'.toCharArray()){ if(!contains(keys,c)){ keys[index++]=c; } } return keys; } // 定义一个函数,根据新字母表加密字符串 public static String encryptString(String str, char[] keys){ char[] oldKey="ABCDEFGHIJKLMNOPQRSTUVWXYZ".toCharArray(); StringBuilder sb=new StringBuilder(); for(char c:str.toCharArray()){ if(Character.isLetter(c)){ int i=oldKey[c-'A']; char newC=keys[i]; if(Character.isLowerCase(c)){ newC=Character.toLowerCase(newC); } sb.append(newC); }else{ sb.append(c); } } return sb.toString(); } // 定义一个函数,判断一个数组是否包含某个字符 public static boolean contains(char[] arr,char c){ for(char a:arr){ if(a==c){ return true; } } return false; } public static void main(String[] args){ Scanner sc=new Scanner(System.in); while(sc.hasNext()){ // 输入密钥和需要加密的字符串 String key=sc.next().toUpperCase(); String str=sc.next(); // 调用函数生成新字母表 char[] keys=createNewKey(key); // 调用函数加密字符串 String res=encryptString(str,keys); System.out.println(res); } } }
自行实现
public class HJ036 {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.println(encode(sc.nextLine(), sc.nextLine()));
}
public static String encode(String key, String info) {
StringBuffer sb = new StringBuffer();
for (char c : key.toLowerCase().toCharArray()) {
if (sb.toString().indexOf(c) == -1) {
sb.append(c);
}
}
int diff = sb.length();
char cur = 'a';
for (int i = 0; i < 26 - diff; i++) {
while (sb.toString().indexOf(cur) != -1) {
cur = (char) (cur + 1);
}
sb.append(cur);
}
String newSeq = sb.toString();
StringBuffer ans = new StringBuffer();
boolean flag = false;
for (char c : info.toCharArray()) {
if (!Character.isLetter(c)) {
ans.append(c);
continue;
}
flag = Character.isUpperCase(c);
c = Character.toLowerCase(c);
char d = newSeq.charAt(c - 'a');
if (flag) {
d = Character.toUpperCase(d);
}
ans.append(d);
}
return ans.toString();
}
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· 上周热点回顾(2.24-3.2)
2022-07-19 MySql保留两位小数
2022-07-19 MySQL保留2位小数
2022-07-19 MySql数据库中null值与其他值的比较
2021-07-19 Mac命令删除文件夹和文件命令