小Byte想在七夕当天——bytedance笔试题

楼主昨天参加了bytedance 的视频笔试,今天给大家分享一下,

题目描述:

小Byte想在七夕当天…此处省略三百字…

就是小byte想给小dance写封情书,怕被别人看见,需要加密。

加密法则为:

1. 对每个单词加密
2. 不改变单词的大小写
3. 针对每个单词,从第一个字母开始标序号,到最后一个字母, 取出所有序号为奇数的字母,连起来加密后单词的前半部分; 再倒着取出所有序号为偶数的字母,作为单词的后半部分。
4.例如,abcdefg 加密后的前半部分为 aceg ,后半部分为 fdb , 整个字符串加密后为: acegfdb

在这里插入图片描述

设计思路:解密算法需要从加密算法中寻找,我们可以看到,密文分两部分,字符串编号奇数连起来为头部,编号偶数倒序作为尾部,因此,解密算法应该先取出密文的头部和尾部。这里我使用
substring(0,(message.length()+1)/2);来取密文头部,

substring((message.length()+1)/2); 来取尾部

然后从头部从前往后取chatAt(index),尾部从后往前取chatAt(index)

具体算法如下:

private static String decrypt(String message) {     //解密算法
        String head = message.substring(0,(message.length()+1)/2);
        String tail = message.substring((message.length()+1)/2);
        StringBuilder stringBuilder = new StringBuilder("");
        //System.out.println(head+" "+tail);
        int i = 0, j = tail.length()-1;
        while(i<head.length()||j>=0){
            stringBuilder.append(head.charAt(i));
            if(j>=0) {
                stringBuilder.append(tail.charAt(j));
            }
            i++;
            j--;
        }
        return stringBuilder.toString();
    }

rs:

请输入密文: 
acegfdb
解密结果为:
abcdefg 

next

请输入密文: 
wloemce to btdnecaey
解密结果为:
welcome to bytedance 

立个flag 今天之前楼主会上传本题加密算法。。。

通过解密算法的经验,我们可以一样,new两个StringBuilder对象用来存储加密后的头和尾,然后,再用StringBuilder自带封装的reverse()方法将尾部的字符串反转,最后连接到头部就行了。

具体实现:

private static String encryption(String message) {   //加密算法
        StringBuilder head = new StringBuilder("");
        StringBuilder tail = new StringBuilder("");
        for(int i = 0; i<message.length(); i++){
            if(i%2==0){
                head.append(message.charAt(i));
            }else {
                tail.append(message.charAt(i));
            }
        }
        return head.append(tail.reverse()).toString();
    }

rs:

请输入需要加密的内容
welcome to bytedance
加密结果为:
wloemce to btdnecaey 
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章