1. 程式人生 > >京東2018校招研發筆試題記錄

京東2018校招研發筆試題記錄

背景

這幾天正好是各大網際網路公司校招筆試的時間,於是陪著同學一起做了一下京東的筆試題。其中單選和不定項選擇題涵蓋的範圍還是比較廣的,包括子網掩碼的計算、linux相關知識點、C++知識點、設計模式等。程式設計題有兩道,其實難度不大,現在將第一題以及我的答案記錄一下供大家參考。

題目描述:

給定一個字串s,請計算輸出含有連續兩個s作為子串的最短字串。注意兩個s可能有重疊部分。例如,”ababa”含有兩個aba。

輸入描述:

輸入包括一個字串s,字串長度length(1<length1<50),s中每個字元都是小寫字母。

輸出描述:

輸出一個字串,即含有連續兩個s作為子串的最短字串。

輸入:

abracadabra

輸出:

abracadabracadabra

思路:

題目中說是包含兩個s作為子串,而且可以有重疊部分。所以說,如果沒有重疊的部分,最後輸出的便是最長的字串,即兩個s拼接在一起。如果有重疊部分,也是僅限於s的前n位和s的後n位是一樣的才可以。因此,我們可以用最簡單的方式,把兩個s當成s1和s2。從s1的第2(n)位往後開始和s2的第一位往後的每一個字元進行對比,如果直到s1的結尾都是一致的,則最後輸出的字元便是s1的前1(n-1)個字元拼接s2。如果有不一致的,則從s1的第3(n+1)位開始重複比對,以此類推。

程式碼實現:

public class JDTest {
    public static void main(String[] args) {
        Scanner ss = new Scanner(System.in);
        String s = ss.next();
        System.out.println(getString(s));
    }
    public static String getString(String s) {
        char[] charArray = s.toCharArray();//將字串s轉為char陣列
        for
(int i = 1; i < charArray.length; i++) { //每次從s1的第i位與s2的第0位開始比較 int j = 0; int tempi = i; //如果相等則繼續比較s1和s2的下一位字元 while (charArray[j] == charArray[tempi]) { //如果到了s1的最後一位都是相等的,則返回最短字串 if (tempi == charArray.length - 1) { String result1 = s.substring(0, i); return result1 + s; } j++; tempi++; } } //如果沒有重複,則返回兩個s拼接的字串 return s + s; } }

當然,如果有更好的解決方法,希望各位讀者可以補充交流。

最後慶祝我的獨立域名部落格正式上線啦

本篇文章也會在我的獨立域名部落格異思園同步釋出,當然,在那個部落格上也會發布一些和技術無關的瞎扯胡扯的文章啦,畢竟在CSDN部落格上,還是主要寫一些技術性的文章嘛(嚴肅臉)