華為2018軟件崗筆試題之第一題python求解分享


閑來無事,突然看到博客園首頁上有人寫了篇了華為2018軟件崗筆試題解題思路和源代碼分享。看了下題目,感覺第一題能做出來,就想着用剛剛學的python試着寫一下,花費的時間有點長~~,看來又好長時間沒練習算法了。

題目描述

輸入兩個字母串,將兩個字母串都包含的字母用'_'替換后,輸出兩個字母串的剩余部分。

輸入描述:

輸入兩個字符串,字符串最大長度為100。字符串只包含字母,不可能為空串,區分大小寫。

輸出描述:

按字符串順序輸出處理后的字符串

示例1

輸入
abcd
bdef
輸出
a_c_ 
__ef

解題思路:對輸入的兩個字符串分別建立ASCII中a-z和A-Z字符順序的hash表,hash表默認為0,遍歷一次字符串,每出現一個字符對應的hash表加1,可以得到包含字符出現次數的hash表。之后,對字符串中的每一個字符根據兩個hash表判斷是否在兩個字符串都包含,如果是用'_'替換。最后輸出字符串。
python關鍵點:因為str類型是不可變類型,所以我想到了先用list()函數把字符串轉換成列表,之后替換就變得容易了。

代碼展示

def replaceSame(str1, str2):
    list1 = list(str1)
    list2 = list(str2)
    hashTable1 = {}
    hashTable2 = {}
    for i in range(65, 91):
        hashTable1[i] = 0
        hashTable2[i] = 0
    for i in range(97, 123):
        hashTable1[i] = 0
        hashTable2[i] = 0
    for i in list1:
        hashTable1[ord(i)] += 1
    for i in list2:
        hashTable2[ord(i)] += 1
    for i in list1 if len(list1)>=len(list2) else list2:
        if hashTable1[ord(i)]>0 and hashTable2[ord(i)]>0:
            list1[list1.index(i)] = '_'
            list2[list2.index(i)] = '_'
    print("".join(list1))
    print("".join(list2))
def judge(str1, str2):
    if len(str1)>10 or len(str2)>10:
        print('請輸入長度不超過100的字符串')
        return False
    elif str1=="" or str2=="":
        print('字符串不能為空')
        return False
    for j in a:
        if 65<=ord(j)<=90 or 97<=ord(j)<=122:
            continue
        else:
            print('請輸入只包含字母的字符串')
            return False
    return True
if __name__ == '__main__':
    a = input("a=")
    b = input("b=")
    if judge(a, b):
        replaceSame(a, b)

結果展示

額,代碼貌似有點長了,路過的童鞋要是有什么更簡單高效的方法可以在評論中點出來的呦~~,本女子不勝感激。


免責聲明!

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



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