题解 | #字符串加密#

字符串加密

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

import java.util.*;
public class Main {
        public static void main(String[] args){
            Scanner sc = new Scanner(System.in);
            while(sc.hasNext()){
                //将key转化成大写 建立映射关系
                String key =sc.nextLine().toUpperCase();
                String str = sc.nextLine();//要加密的字符串
                char[] keyArr = key.toCharArray();
                //char[] strArr = str.toCharArray();
                //1 建立 key连接之后的字母表
                //用set 自动去重
                LinkedHashSet<Character> set = new LinkedHashSet();
                //先把key加到set
                for(int i=0;i<keyArr.length;i++){
                    set.add(keyArr[i]);
                }
                //再把剩下的字母加进去
                for(char c='A';c<='Z';c++){
                    set.add(c);
                }
                //2 建立 与原始的26个字母之间的映射关系(ascii)
                int[] arr = new int[128];
                //用原始字母当下标,然后用新建立的set赋值
                char ch = 'A';
                for (Character c: set){
                    arr[ch]=c;
                    ch++;
                }
                //3 遍历加密的字符串,去找对应的映射,注意判断,是小写字母的话,先转化成大写,再转为小写
                StringBuilder sb = new  StringBuilder();
                for(int i=0;i<str.length();i++){
                     char c1 = str.charAt(i);
                    if(c1>='a' && c1<='z'){
                        c1=(char)(c1-32);
                        sb.append((char)(arr[c1]+32));
                    }else if(c1==' '){
                        sb.append(c1);
                    }else{
                        sb.append((char)arr[c1]);
                    }
                }
                //4 打印
                System.out.println(sb.toString());
            }
        }
}

//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
//N I H A O
全部评论

相关推荐

点赞 收藏 评论
分享
牛客网
牛客企业服务