第一行输入一个长度为
,仅由小写字母构成的字符串
,代表待构建的新字母表底串。
第二行输入一个长度为
,仅由小写字母构成的字符串
,代表需要加密的明文。
在一行上输出一个字符串,代表加密后的密文。
trailblazers attackatdawn
tpptadtpitvh
在这个样例中,加密的操作如下:
对
进行去重
,得到
;
随后从
开始依次在字符串末尾补充
中未出现的字母,得到
;
最后,对于
中的每个字母,替换为
构建得到的新字母表中相同位置的字母。我们可以列出对照表:
最后,对于
中的每个字母,替换为
构建得到的新字母表中相同位置的字母,得到
。
nihao ni
le
import java.util.Scanner; // 注意类名必须为 Main, 不要有任何 package xxx 信息 public class Main { public static void main(String[] args) { Scanner in = new Scanner(System.in); // 注意 hasNext 和 hasNextLine 的区别 String str =in.next(),password=in.next(),table=""; char[] charTable = new char[26]; int offset = 97; for(int i=0;i<str.length();i++){ if(!table.contains(String.valueOf(str.charAt(i)))) table+=str.charAt(i); } for(char a='a';a<='z';a++){ if(!table.contains(String.valueOf(a))) table+=a; } charTable=table.toCharArray(); table=""; for(int i=0;i<password.length();i++){ table+=charTable[password.charAt(i)-offset]; } System.out.println(table); } }
import java.util.Scanner; public class Main { public static void main(String[] args) { Scanner in = new Scanner(System.in); String s = in.next(); String t = in.next(); // 对s去重 => s1 int[] cnt = new int[26]; // 记录26个字母出现次数 String s1 = ""; for (char c : s.toCharArray()) { if (cnt[c - 'a'] == 0) { cnt[c - 'a']++; s1 += c; } } // s1 + 未出现字母 for (int i = 0; i < 26; i++) { if (cnt[i] == 0) { s1 += (char)('a' + i); } } // 对t加密 => res String res = ""; for (char c : t.toCharArray()) { res += s1.charAt(c - 'a'); } System.out.print(res); } }
import java.io.BufferedReader; import java.io.InputStreamReader; // 注意类名必须为 Main, 不要有任何 package xxx 信息 public class Main { public static void main(String[] args) throws Exception { BufferedReader in = new BufferedReader(new InputStreamReader(System.in)); // 注意 hasNext 和 hasNextLine 的区别 String s; while ((s=in.readLine())!=null) { // 注意 while 处理多个 case char[] arr = getArray(s); s = in.readLine(); char[] res = new char[s.length()]; for (int i = 0;i < s.length();i++) { res[i] = arr[s.charAt(i)]; } System.out.println(String.valueOf(res)); } } private static char[] getArray(String s) { char[] arr = new char[128]; StringBuilder sb = new StringBuilder(s); for (int i = 0;i < sb.length();i++) { while (sb.indexOf(String.valueOf(sb.charAt(i))) != sb.lastIndexOf(String.valueOf(sb.charAt(i)))) { sb.deleteCharAt(sb.lastIndexOf(String.valueOf(sb.charAt(i)))); } } s = sb.toString(); sb = new StringBuilder(); int j = 0; for (char i = 'a';i <= 'z';i++) { sb.append(i); if (arr[i] == 0) { if (j < s.length()) arr[i] = s.charAt(j); } j++; } for (int i = 0;i < s.length();i++) { while (sb.indexOf(String.valueOf(s.charAt(i))) > -1) { sb.deleteCharAt(sb.indexOf(String.valueOf(s.charAt(i)))); } } j = 0; for (char i = (char)('a'+s.length());i <= 'z';i++) { if (arr[i] == 0) { if (j < sb.length()) arr[i] = sb.charAt(j); } j++; } return arr; } }
import java.util.*; // 注意类名必须为 Main, 不要有任何 package xxx 信息 public class Main { public static void main(String[] args) { Scanner in = new Scanner(System.in); // 注意 hasNext 和 hasNextLine 的区别 while (in.hasNext()) { // 注意 while 处理多个 case String key = in.nextLine(); String str = in.nextLine(); //定义大写字母表 String upperAlphabet = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"; //定义小写字母表 String lowerAlphabet = "abcdefghijklmnopqrstuvwxyz"; //使用linkedHashSet去重 LinkedHashSet<Character> upperSet = new LinkedHashSet<>(); LinkedHashSet<Character> lowerSet = new LinkedHashSet<>(); for (int i = 0; i < key.length(); i++) { upperSet.add(Character.toUpperCase(key.charAt(i))); lowerSet.add(Character.toLowerCase(key.charAt(i))); } for (char c = 'A'; c <= 'Z'; c++) { upperSet.add(c); } for (char c = 'a'; c <= 'z'; c++) { lowerSet.add(c); } List<Character> lowerList = new ArrayList<>(lowerSet); List<Character> upperList = new ArrayList<>(upperSet); //对字符串进行加密 for (int i = 0; i < str.length(); i++) { int index = -1; char c = str.charAt(i); if (c >= 'a' && c <= 'z') { for (int j = 0; j < lowerAlphabet.length(); j++) { if (c == lowerAlphabet.charAt(j)) { index = j; break; } } if (index != -1) { System.out.print(lowerList.get(index)); } } else { for (int j = 0; j < upperAlphabet.length(); j++) { if (c == upperAlphabet.charAt(j)) { index = j; break; } } if (index != -1) { System.out.print(upperList.get(index)); } } } } } }
import java.util.LinkedHashSet; import java.util.List; import java.util.Scanner; import java.util.Set; public class Main { public static void main(String[] args) { Scanner in = new Scanner(System.in); char[] key = in.nextLine().toCharArray(); char[] wolds = in.nextLine().toCharArray(); Set<Character> set = new LinkedHashSet<>(); for (char c : key) { set.add(c); } int k = 0; while (set.size() < 26) { char c = (char)('a' + k); set.add(c); k++; } Object[] arr = set.toArray(); StringBuilder builder = new StringBuilder(); for (char c : wolds) { int n = c - 'a'; builder.append(arr[n]); } System.out.println(builder.toString()); } }
import java.io.BufferedReader; import java.io.InputStreamReader; import java.io.IOException; public class Main { private static final int LOWER_CASE_SIZE = 26; public static void main(String[] args) throws IOException { BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); String key = null; while ((key = br.readLine()) != null) { char[] kChs = key.toLowerCase().toCharArray(); char[] dict = new char[LOWER_CASE_SIZE]; boolean[] seen = new boolean[LOWER_CASE_SIZE]; int idx = 0; for (char ch : kChs) { if (seen[ch - 'a']) { continue; } dict[idx++] = ch; seen[ch - 'a'] = true; } for (int i = 0; i < LOWER_CASE_SIZE; i++) { if (seen[i]) { continue; } dict[idx++] = (char) (i + 'a'); } char[] pChs = br.readLine().toLowerCase().toCharArray(); StringBuilder sb = new StringBuilder(); for (char ch : pChs) { sb.append(dict[ch - 'a']); } System.out.println(sb); } } }
import java.util.*; // 注意类名必须为 Main, 不要有任何 package xxx 信息 public class Main { public static void main(String[] args) { Scanner in = new Scanner(System.in); // 注意 hasNext 和 hasNextLine 的区别 while (in.hasNextLine()) { // 注意 while 处理多个 case String s1 = in.nextLine(); String s2 = in.nextLine(); Set<Character> tree = new LinkedHashSet(); for (int i = 0; i < s1.length(); i++) { tree.add(s1.charAt(i)); } //构建字母表 String letter = "abcdefghijklmnopqrstuvwxyz"; StringBuilder stringBuilder = new StringBuilder(); for (Character c : tree) { letter = letter.replace(c+"",""); stringBuilder.append(c); } stringBuilder.append(letter); //注意:字母字符的大小写状态应该保留 StringBuilder res = new StringBuilder(); for (char c : s2.toCharArray()) { if (Character.isUpperCase(c)){ res.append(Character.toUpperCase(stringBuilder.charAt(c - 'A'))); }else if (Character.isLowerCase(c)){ res.append(stringBuilder.charAt(c - 'a')); }else { res.append(c); } } System.out.println(res); } } }
import java.util.*; // 注意类名必须为 Main, 不要有任何 package xxx 信息 public class Main { public static void main(String[] args) { Scanner in = new Scanner(System.in); String key = in.nextLine() + "abcdefghijklmnopqrstuvwxyz"; String word = in.nextLine(); List<Character> list = new ArrayList(); for(int i = 0; i < key.length(); i++){ if(!list.contains(key.charAt(i))) list.add(key.charAt(i)); } for(int i = 0; i < word.length(); i++){ System.out.print(list.get(word.charAt(i) - 'a')); } } }
import java.util.*; import java.util.stream.Collectors; // 注意类名必须为 Main, 不要有任何 package xxx 信息 public class Main { public static void main(String[] args) { Scanner in = new Scanner(System.in); String key = in.nextLine(); String word = in.nextLine(); String result = key + "abcdefghijklmnopqrstuvwxyz"; List<Character> allList = new ArrayList<>(); for(char c:result.toCharArray()){ allList.add(c); } List<Character> list = allList.stream().distinct().collect(Collectors.toList()); StringBuilder sb = new StringBuilder(); for(char a:word.toCharArray()){ sb.append(list.get(a-'a')); } System.out.println(sb.toString()); } }
import java.util.*; public class Main { public static void main(String[] args) { Scanner in = new Scanner(System.in); String key = in.nextLine(); String input = in.nextLine(); System.out.print(new Main().encrypt(key, input)); } public String encrypt(String key, String input) { char[] chars = key.toCharArray(); LinkedHashSet<Character> set = new LinkedHashSet<>(); for (char ch : chars) { set.add(ch); } LinkedHashSet<Character> set1 = new LinkedHashSet<>(); for (int i = 97; i <= 122; i++) { set1.add((char)i); } LinkedHashSet<Character> set2 = new LinkedHashSet<>(); set2.addAll(set1); set1.removeAll(set); set.addAll(set1); HashMap<Character, Character> map = new HashMap<>(); Iterator<Character> iterator2 = set2.iterator(); Iterator<Character> iterator = set.iterator(); for (int i = 0; i < set.size(); i++) { map.put(iterator2.next(), iterator.next()); } char[] chs = input.toCharArray(); for (int i = 0; i < chs.length; i++) { if (Character.isLetter(chs[i])) { chs[i] = map.get(chs[i]); } } return new String(chs); } }
import java.util.Scanner; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.util.ArrayList; import java.util.LinkedHashSet; // 注意类名必须为 Main, 不要有任何 package xxx 信息 public class Main { public static void main(String[] args) throws IOException { BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); String key = br.readLine(); String line = br.readLine(); // 业务场景为存取有序,且不重复,所以用linkedHashSet数据结构 LinkedHashSet<Character> set = new LinkedHashSet<>(); for (int i = 0; i < key.length(); i++) { char c = key.charAt(i); // 统一转换为大写 set.add(Character.toUpperCase(c)); } // 添加其他的字母到密钥中 for (char i = 'A'; i <= 'Z'; i++) { set.add(i); } // 转换为list,方便后续使用索引找到对应加密后的字符 ArrayList<Character> list = new ArrayList<>(); for (Character character : set) { list.add(character); } // 打印密钥 // System.out.println(list); // 正常顺序的字符,保存大写,与密钥大小写一致 ArrayList<Character> list2 = new ArrayList<>(); for (char i = 'A'; i <= 'Z'; i++) { list2.add(i); } //System.out.println(list2); StringBuilder result = new StringBuilder(); // 遍历要加密的字符串 for (int i = 0; i < line.length(); i++) { char c = line.charAt(i); // 获取在正常字符顺序中的索引值 int index = list2.indexOf(Character.toUpperCase(c)); // 获取加密后的字符 Character character = list.get(index); // 大小写保持一致 if (Character.isLowerCase(c)){ result.append(Character.toLowerCase(character)); }else if (Character.isUpperCase(c)){ result.append(Character.toUpperCase(character)); } } System.out.println(result); } }
import java.util.*; // 注意类名必须为 Main, 不要有任何 package xxx 信息 public class Main { public static void main(String[] args) { Scanner in = new Scanner(System.in); // 注意 hasNext 和 hasNextLine 的区别 String str = in.nextLine(); String password = in.nextLine(); Set<Character> set = new TreeSet<>(); List<Character> list = new ArrayList<>(); for(int i = 0 ; i < str.length(); i ++){ if(set.add(str.charAt(i))){ list.add(str.charAt(i)); } } for(int a = 97; a <= 122 ; a ++){ // a-z 97 -122 if(list.contains((char)(a))){ continue; }else{ list.add((char)(a)); } } for(int i = 0 ; i < password.length() ; i++){ System.out.print(list.get((int)(password.charAt(i)) - 97)); // a-z 97 -122 } } }
import java.util.*; // 注意类名必须为 Main, 不要有任何 package xxx 信息 public class Main { public static void main(String[] args) { Scanner in = new Scanner(System.in); //密匙key String key = in.nextLine(); //要加密的字符串 String str = in.nextLine(); char[] keys = key.toCharArray(); //keys 去重 Set<Character> set = new LinkedHashSet<>(); for (char c : keys) { set.add(c); } //set转String类型,去掉[]空格和逗号 String keySet = set.toString().replaceAll("[\\[\\]\\s,]", ""); //定义小写字母 String alphabet = "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"; String[] st = alphabet.split(" "); Map<String, String> map = new HashMap<>(); //循环keySet,保存到map中,其中map的key为 alphabet中的前 keySet.length() 个单词 ,value为keySet的每个单词 for (int i = 0; i < keySet.length(); i++) { map.put(st[i], String.valueOf(keySet.charAt(i))); } //循环alphabet ,定义res = keySet.length() for (int i = 0, res = keySet.length(); i < st.length; i++) { //如果 map中不包含value为 st[i],则需要把当前st[i] 作为value存入map中,把st[res++]作为map的key, if (!map.containsValue(st[i])) { map.put(st[res++], st[i]); } } //加密后的字符串 String result = ""; //遍历要加密的字符串,是否在map的key中,如果在,则输出对应的value for (int j = 0; j < str.length(); j++) { String c = String.valueOf(str.charAt(j)); if (map.containsKey(c)) { result += map.get(c); } } System.out.println(result); } }
import java.util.*; // 注意类名必须为 Main, 不要有任何 package xxx 信息 public class Main { public static void main(String[] args) { Scanner in = new Scanner(System.in); // 构建字典顺序26个字母的字母表 List<Character> old = new ArrayList<Character>(); for (int i = 0 ; i < 26 ; i++) { old.add((char)('a' + i)); } // 注意 hasNext 和 hasNextLine 的区别 while (in.hasNext()) { // 注意 while 处理多个 case String a = in.nextLine(); String b = in.nextLine(); List<Character> newList = new ArrayList<Character>(); // 构建新的字母表,先放入key字符串 for (int i = 0 ; i < a.length() ; i++) { char c = a.charAt(i); if (!newList.contains(c)) { newList.add(c); } } // 构建新的字母表,顺序放入其他字符串 for (int i = 0 ; i < 26 ; i++) { char c = old.get(i); if (!newList.contains(c)) { newList.add(c); } } // 输出加密后的字符串 for (int i = 0 ; i < b.length() ; i++) { char c = b.charAt(i); int index = c - 'a'; System.out.printf(String.valueOf(newList.get(index))); } System.out.printf("\n"); } } }