華為2018軟件崗筆試題解題思路和源代碼分享


  2017年9月26日,參加了華為技術有限公司的筆試,題目類型是軟件題,沒有選擇填空問答類型,總共是3道編程題目,題目難度適中,在兩個小時內完成3道題目的AC,所以分享的代碼都是可運行且完全AC的! 和廣大網友分享,相互交流提高。

***********************************************

題目描述

  輸入兩個字母串,將兩個字母串都包含的字母用'_'替換后,輸出兩個字母串的剩余部分。
輸入描述:
  輸入兩個字符串,字符串最大長度為100。字符串只包含字母,不可能為空串,區分大小寫。
輸出描述:
  按字符串順序輸出處理后的字符串

示例1
  輸入
  abcd
  bdef
  輸出
  a_c_
  __ef

 

解題思路:對輸入的兩個字符串分別建立ASCII字符順序的hash表,hash表默認為0,遍歷一次字符串,每出現一個字符對應的hash表加1,可以得到包含字符出現次數的hash表。在輸出時,對字符串中的每一個字符根據兩個hash表判斷是否在兩個字符串都包含,如果是用'_'替換,否則輸出原字符。

程序鏈接:  https://github.com/wylloong/TinyPrograms/blob/master/Coding%20Interviews/HW_ReplaceSameCharsAs_ (同步更新)

 

***********************************************

題目描述
   一本正式出版的圖書都有一個ISBN號碼與之對應,ISBN碼包括9位數字、1位識別碼和3位分隔符,其規定格式如“x-xxx-xxxxx-x”,其中符號“-”是分隔符(鍵盤上的減號),最后一位是識別碼,例如0-670-82162-4就是一個標准的ISBN碼。ISBN碼的首位數字表示書籍的出版語言,例如0代表英語;第一個分隔符“-”之后的三位數字代表出版社,例如670代表維京出版社;第二個分隔之后的五位數字代表該書在出版社的編號;最后一位為識別碼。識別碼的計算方法如下:

  首位數字乘以1加上次位數字乘以2……以此類推,用所得的結果mod 11,所得的余數即為識別碼,如果余數為10,則識別碼為大寫字母X。例如ISBN號碼0-670-82162-4中的識別碼4是這樣得到的:對067082162這9個數字,從左至右,分別乘以1,2,…,9,再求和,即0×1+6×2+……+2×9=158,然后取158 mod 11的結果4作為識別碼。

  你的任務是編寫程序根據輸入的ISBN號碼的前3段,計算出識別碼,並輸出完整的ISBN碼。
輸入描述:
  為一個ASCII字符串。內容為ISBN碼的前三段,以上面為例,就是0-670-82162。
輸出描述:
  若判斷輸入為合法的字符串,則計算出識別碼,並輸出完整的ISBN碼;
  若輸入不合法,則輸出字符串”ERROR”;

 

示例1
  輸入
  0-670-82162

  輸出
  0-670-82162-4

 

解題思路:實現功能難度較低,注意異常輸入和邊界值。先判斷輸入的字符串是否合法,合法后分解字符串為字符保存到數組中,然后根據公式依次計算字符的乘積,最后取余,但是需要注意10的輸出具有特殊性!

程序鏈接: https://github.com/wylloong/TinyPrograms/blob/master/Coding%20Interviews/HW_ISBNCheckCode.cpp

 

***********************************************

 

題目描述

  主機名由多級域名組成,自右向左,依次是頂級域名、二級域名、三級域名…..以此類推
  例,主機名:google.com.hk
  hk是頂級域名
  com是二級域名
  google是三級域名
  現在我們需要實現一個主機名的排序功能
  排序規則
  1)主機名按照域名等級排序,即先按照頂級域名排序,頂級域名相同的再按照二級域名排序,頂級和二級域名均相同的再按照三級域名排序,以此類推,直到整個主機名排序完畢
  2)如果短主機名是由長主機名從頂級域名開始的連續一個或多個域名組成,短主機名排在長主機名前面。例:google.com 排在 gmail.google.com 之前
  3)每一級域名按照字典順序排序,字典順序定義見下頁
 

  輸入確保符合以下規則(無需檢查)
  1)主機名以字符串形式給出,非空串
  2)主機名中僅包含小寫英文字母和分隔符’.’
  3)主機名中沒有連續的’.’,不以’.’開始,也不以’.’結束
  3)主機名不存在重復
  1、兩個單詞(字母按照自左向右順序)先以第一個字母作為排序的基准,如果第一個字母相同,就用第二個字母為基准,如果第二個字母相同就以第三個字母為基准。依此類推,如果到某個字母不相同,字母順序在前的那個單詞順序在前。
例:abc 排在 abf 之前
  2、如果短單詞是長單詞從首字母開始連續的一部分,短單詞順序在前。
  例:abc 排在 abcd 之前

輸入描述:
  不超過255個字符的字符串,不同的域名間用字符'|'進行分隔。
輸出描述:
  排序后的的域名,域名間用字符'|'進行分隔。

示例1
  輸入
  mail.huawei.com|huawei.com|teltalk.org|google.com.hk|imail.huawei.com
  輸出
  huawei.com|imail.huawei.com|mail.huawei.com|google.com.hk|teltalk.org

 

  解題思路:首先根據“|”字符來分割輸入域名字符串,保存到list中。結合插入排序的思想,針對每一個域名根據‘,’分隔,然后依次和已經排好序的域名序列比較,直到找到符合條件的位置,即大於已排序域名序列的前者,小於后者,插入到排序好的域名序列中,完成域名的排序!

 

程序鏈接: https://github.com/wylloong/TinyPrograms/blob/master/Coding%20Interviews/HW_DomainNameRanking.py

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM