华为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)

结果展示

额,代码貌似有点长了,路过的童鞋要是有什么更简单高效的方法可以在评论中点出来的呦~~,本女子不胜感激。

认真对待每一天,加油
原文地址:https://www.cnblogs.com/sunshine21/p/7747874.html