小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 
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章