Java笔试(02) - 字符串

字符串处理

2.1)字符串加密

 题解:

  1. 输入一个单词作为密匙,如果单词中包含有重复的字母,只保留第1个,其余几个丢弃,然后用字母表其他未出现过的字母按顺序接在后面,作为密钥,由A-Z对应这串密钥

  2. 保证输入的字符串中仅包含小写字母

  3. 多组输入

方法一:暴力

借助ArrayList,将key和字母表的其他字母依次放入list中,如果有相同的值保留第一个,最后遍历需要加密的字符串,在list中查找对应的加密密码。最终输出结果即可。

代码如下:

public class Solution {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        while (sc.hasNext()) {
            String key = sc.next().toLowerCase();
            String s = sc.next();
            ArrayList<Character> list = new ArrayList<>();
            for (int i = 0; i < key.length(); i++) {
                //如果list中不存在就放入
                if (!list.contains(key.charAt(i))) {
                    list.add(key.charAt(i));
                }
            }
            //将a-z放入到list中
            for (int i = 97; i <= 122; i++) {
                char c = (char) i;
                if (!list.contains(c))
                    list.add(c);
            }
            String result = "";
            for (int i = 0; i < s.length(); i++) {
                if (s.charAt(i) >= 97 && s.charAt(i) <= 122) {
                    result += list.get(s.charAt(i) - 97);
                } else {
                    result += Character.toUpperCase(list.get(s.charAt(i) - 97));
                }
            }
            System.out.println(result);
        }
    }
}

方法二:借助HashMap

将方法一中得到的list存入到Map中,在遍历需要加密的字符串时,可以直接从Map中获得当前字符加密后的字符。

public class Solution {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        while (sc.hasNext()){
            String key = sc.next().toLowerCase();
            String s = sc.next();
            ArrayList<Character> list = new ArrayList<>();
            for(int i=0;i<key.length();i++){
                //如果list中不存在就放入
                if(!list.contains(key.charAt(i))){
                    list.add(key.charAt(i));
                }
            }
            //将A-Z放入到list中
            for(int i= 97;i<=122;i++){
                char c = (char) i;
                if(!list.contains(c))
                    list.add(c);
            }
            Map<Character,Character> map = new HashMap<>();
            int begin = 97;
            for (int i=0;i<list.size();i++) {
                map.put((char)(begin+i),list.get(i));
            }
​
            StringBuilder result = new StringBuilder();
            for (int i=0;i<s.length();i++){
                char c = s.charAt(i);
                Character character = map.get(c);
                if(s.charAt(i)>=97 && s.charAt(i)<=122){
                    result.append(character);
                }else {
                    result.append(Character.toUpperCase(character));
                }
            }
            System.out.println(result.toString());
        }
    }
}

猜你喜欢

转载自blog.csdn.net/jianghao233/article/details/127793981