题解 | #字符串加密#

字符串加密

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

import java.util.Scanner;

// 注意类名必须为 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 word = in.nextLine();
            // 明文
            String plaintext = in.nextLine();

            char[] secretKey = new char[26];
            int[] upperFlag = new int[plaintext.length()];

            char[] words = word.toLowerCase().toCharArray();
            // 字母是否已存在,下标为字母- 'a' 例如 'a'-'a' = 0,则'a'的下标为0
            int[] existFlag = new int[26];
            int k = 0;
            for (int i = 0; i < words.length; i++) {
                char ch = words[i];
                int existFlagIndex = ch - 'a';
                // 在单词中已存在此字母,则去除
                if (existFlag[existFlagIndex] == 1) {
                    continue;
                }
                // 不存在,则标记为已存在
                existFlag[existFlagIndex] = 1;
                // 将字母放入密匙中
                secretKey[k] = words[i];
                k++;
            }

            // 用未出现过的字母,填充密匙字典
            for (int i = 0; i < existFlag.length; i++) {
                if (existFlag[i] == 0) {
                    secretKey[k] = (char) (i + 'a');
                    k++;
                }
            }

            char[] plaintextChars = plaintext.toCharArray();
            for (int i = 0; i < plaintextChars.length; i++) {
                // 标记大写字母
                if (plaintextChars[i] >= 'A' && plaintextChars[i] <= 'Z') {
                    upperFlag[i] = 1;
                }
            }

            StringBuilder codedWord = new StringBuilder();
            char[] toCodeChars = plaintext.toLowerCase().toCharArray();
            for (int i = 0; i < toCodeChars.length; i++) {
                char ch = secretKey[toCodeChars[i] - 'a'];
                // 恢复大写
                if (upperFlag[i] == 1) {
                    ch = (char) (ch + 32);
                }

                codedWord.append(ch);
            }

            System.out.println(codedWord.toString());

        }
    }
}

全部评论

相关推荐

Natrium_:这时间我以为飞机票
点赞 评论 收藏
分享
牛客717484937号:双飞硕没实习挺要命的
点赞 评论 收藏
分享
点赞 评论 收藏
分享
点赞 收藏 评论
分享
牛客网
牛客企业服务