题解 | #字符串加密#

字符串加密

http://www.nowcoder.com/practice/e4af1fe682b54459b2a211df91a91cf3

  • 保姆级代码注释详解

alt

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());
    }


}

全部评论

相关推荐

喜欢吃蛋糕仰泳鲈鱼是我的神:字节可以找个hr 给你挂了,再放池子捞
点赞 评论 收藏
分享
点赞 收藏 评论
分享
牛客网
牛客企业服务