题解 | #字符串加密#
字符串加密
http://www.nowcoder.com/practice/e4af1fe682b54459b2a211df91a91cf3
- 保姆级代码注释详解
import java.io.*;
import java.util.LinkedList;
import java.util.List;
import java.util.Map;
import java.util.TreeMap;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(System.in));
String str = bufferedReader.readLine();
char[] target = bufferedReader.readLine().toCharArray();
char[] chars = str.toCharArray();
// 原始字母表
Map<Character, Integer> letterMap = new TreeMap<>();
for (int i = 0; i < 26; i++) {
letterMap.put((char) ((int) 'a' + i), i);
}
// 新字母表
List<Character> letterListNew = new LinkedList<>();
// 遍历数据创建密钥字母表
for (int i = 0; i < chars.length; i++) {
if (Character.isLetter(chars[i])){
// 建表时忽略大小写
char c = String.valueOf(chars[i]).toLowerCase().charAt(0);
// 若新字母表包含这个字母跳过
if (letterListNew.contains(c)){
continue;
}
// 否则添加,并删除其在旧字母表中的信息
else {
letterListNew.add(c);
letterMap.remove(c);
}
}
}
// 遍历填满剩下的字母
for (Character character : letterMap.keySet()) {
letterListNew.add(character);
}
// 暂存加密后的信息
StringBuilder stringBuilder = new StringBuilder();
// 遍历要加密的信息
for (int i = 0; i < target.length; i++) {
// 若是字母则加密
if (Character.isLetter(target[i])){
// 找到原始字母表中的顺序
int i1 = (int)target[i] - (int)'a';
// 插入当前字母表中该位置的字母
stringBuilder.append(letterListNew.get(i1));
}
// 不是字母则直接插入
else {
stringBuilder.append(target[i]);
}
}
System.out.println(stringBuilder.toString());
}
}