import java.util.HashSet; import java.util.Scanner; public class Main { public static void main(String[] args) { Scanner in = new Scanner(System.in); //先输入key和要加密的字符串 // 数据范围:1≤n≤100 ,保证输入的字符串中仅包含小写字母 String key = in.nextLine(); String plainText = in.nextLine(); /** * 如果密钥中包含有重复的字母,只保留第1个,将所得结果作为新字母表开头, * 并将新建立的字母表中未出现的字母按照正常字母表顺序加入新字母表。 */ //1.创建密码本 char[] keyNote = new char[26]; int i = 0; //记录已经出现的密钥字符 HashSet<Character> existedChars = new HashSet<>(); for(char c : key.toCharArray()){ //2.把密钥中首次出现的字符添加到密码本中 if(existedChars.add(c)){ keyNote[i++] = c; } } //3.把剩下的字母按字典序添加到密码本中 for(int offset=0;offset<26;offset++){ char c = (char) ('a' + offset); if(existedChars.add(c)){ keyNote[i++] = c; } } //4.对明文加密的过程,其实就是对明文对应的小写字母对’a'的偏移量,对应在密码本中的位置 //题目输入范围保障都是小写,就不考虑保留明文大小写状态问题了。 char[] chars = plainText.toCharArray(); for(int j=0;j<chars.length;j++){ int offset = chars[j] - 'a'; chars[j] = keyNote[offset]; } System.out.println(new String(chars)); } }