题解 | #字符串加密#
字符串加密
https://www.nowcoder.com/practice/e4af1fe682b54459b2a211df91a91cf3
import java.util.*;
// 比别人的多了20行...但是运行效率还行,自己看得懂就行
//题目和给的样例不一致,这段代码包含了输入有空格的情况
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
while(sc.hasNext()){
String key = sc.nextLine();
String info = sc.nextLine();
System.out.println(encode(key,info));
}
}
public static String encode(String key, String info){
List<Character> keyChars = new ArrayList<>();
char[] chars = key.toCharArray();
for(int i = 0;i<chars.length;i++){
if(keyChars.contains(chars[i])){
continue;
}
else{
keyChars.add(chars[i]);
}
}
char[] alphabets = "abcdefghijklmnopqrstuvwxyz".toCharArray();
char[] codeBook = new char[26];
for(int i = 0;i<keyChars.size();i++){
codeBook[i] = keyChars.get(i);
}
for(int i=0,j=keyChars.size();i<26;i++){
if(keyChars.contains(alphabets[i])){
continue;
}
else{
codeBook[j++] = alphabets[i];
}
}
StringBuilder code = new StringBuilder();
boolean isCap = true;
int number = 0;
char[] infoChars = info.toCharArray();
for(int i = 0;i<infoChars.length;i++){
if(Character.isLetter(infoChars[i])){
if(infoChars[i]>='a'&&infoChars[i]<='z'){
isCap = false;
}
char infochar = Character.toLowerCase(infoChars[i]);
number = infoChars[i]-'a';
if(isCap){
code.append(Character.toUpperCase(codeBook[number]));
}
else{
code.append(codeBook[number]);
}
}
else{
code.append(infoChars[i]);
}
}
return code.toString();
}
}