題目描述:
有一種技巧可以對資料進行加密,它使用一個單詞作為它的密匙。下面是它的工作原理:首先,選擇一個單詞作為密匙,如TRAILBLAZERS。如果單詞中包含有重複的字母,只保留第1個,其餘幾個丟棄。現在,修改過的那個單詞屬於字母表的下面,如下所示:
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。
輸入描述:
先輸入key和要加密的字串
輸出描述:
返回加密後的字串
import java.util.LinkedHashSet;import java.util.Scanner;import java.util.Set;public class Main{ public static void main(String[] args) { Scanner scanner = new Scanner(System.in); while (scanner.hasNext()) { String key = scanner.next(); String data = scanner.next(); Set<Character> set = new LinkedHashSet<>(); for (char c: key.toCharArray()) { set.add(Character.toUpperCase(c)); } char ch = 'A'; for (int i = set.size(); i < 26; i++) { while (set.contains(ch)) { ch = (char)(ch + 1); } set.add(ch); } String str = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"; char[] arr = new char[set.size()]; int i = 0; for (char c: set) arr[i++] = c; for (char c: data.toCharArray()) { int index = str.indexOf(Character.toUpperCase(c)); System.out.print(Character.toLowerCase(arr[index])); } System.out.println(); } }}