题解 | #字符串加解密# 使用Map集合存储对应的输出数据

字符串加解密

https://www.nowcoder.com/practice/2aa32b378a024755a3f251e75cbf233a

因为每个字符加密或者解密都是有着严格的一一对应关系,所以采用Map处理

解密是加密的逆过程,但是map只能通过key取value,所以想着用数组来存储对应的 加密,解密 后对应的字符
然后就是向map中添加数据了,首尾处需要特殊处理,就单独put了。
最后遍历字符串,碰到字母或者数字,就从map中取对应的value值
ps :感觉用Integer类型的map 可能更好些,不用写这么多强转了,只需要最后输出的时候在转一下就可以了~~
<纪念第一次写题解>
import java.io.*;
import java.util.*;

// 注意类名必须为 Main, 不要有任何 package xxx 信息
public class Main {
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        String s1;
        while ((s1 = br.readLine()) != null) {
            String s2 = br.readLine();

            System.out.println(pwdOp(s1, 0));
            System.out.println(pwdOp(s2, 1));
        }
    }

    // 使用int类型定义密码处理方式(0 代表加密,1 代表解密)
    public static String pwdOp(String s, int type) {
        Map<Character, Character[]> map = new HashMap<>();
        Character[] chars = new
        Character[2]; //对应的, char数组中 0 存储加密后对应字符,1存储解密对应的字符
        //首尾处较为特殊单拎出来put,
        map.put('Z', new Character[] {'a', 'y'});
        map.put('z', new Character[] {'A', 'Y'});
        map.put('A', new Character[] {'b', 'z'});
        map.put('a', new Character[] {'B', 'Z'});
        map.put('0', new Character[] {'1', '9'});
        map.put('9', new Character[] {'0', '8'});

        // 循环添加每个字母对应的加密解密后的字符
        for (int i = 66; i < 90; i++) {
            map.put((char) i, new Character[] {(char) (i + 33), (char) (i + 31)});
            map.put((char) (i + 32), new Character[] {(char) (i + 1), (char) (i - 1)});
        }
        // 数字添加
        for (int i = 49; i < 57; i++) {
            map.put((char)i, new Character[] {(char) (i + 1), (char) (i - 1)});
        }

        // StringBuilder来处理输出数据
        StringBuilder sb = new StringBuilder();
        // 遍历字符串,输出对应的value,注意其他字符不做处理,直接添加即可
        for (int i = 0; i < s.length(); i++) {
            char c = s.charAt(i);
            if (c >= 48 && c <= 57 || (c >= 65 && c <= 90) || (c >= 97 && c <= 122)) {
                sb.append(map.get(c)[type]);
            } else {
                sb.append(c);
            }
        }
        return sb.toString();
    }
}


全部评论

相关推荐

ResourceUtilization:算法很难了,现在都需要相关论文还有对应的实习,可以先试试中厂
点赞 评论 收藏
分享
04-25 18:13
五邑大学 Java
后来123321:大二两段实习太厉害了,我现在大二连面试都没有
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务