华为4-15实习笔试,三道题分别100+100+70,python实现

第一题,就是单纯的统计计数 AC

投票问题计算谁获得的票数最多,平票的时候按名字排序
输入样例就是代码中的第一行

'''
Tom,Lily,Tom,Lucy,Lucy,Jack
'''

# 100%

def test(name):
    return name[0].isupper() and name[1:].islower()


def solution(l):
    dic = {}
    res = None
    key = 0
    for val in l:
        if not test(val):
            print("error.0001")
            return
        if val in dic:
            dic[val] += 1
        else:
            dic[val] = 1
        if not res:
            res = val
            key = dic[val]
        else:
            if dic[val] > key:
                key = dic[val]
                res = val
            elif dic[val] == key:
                if val < res:
                    key = dic[val]
                    res = val
    print(res)


if __name__ == '__main__':
    l = input().split(',')
    solution(l)

第二题,就是匹配 AC

会正则的应该会特别快,不过我不太记得正则的用法,但是python处理字符串效率还是很高的
主要就是不停的根据几个标志进行切分。
字符串匹配,就是保证'['前的字符要和第一个关键词就是read 是一样的,中间也要保证十六进制,和必须有addr,mask,valzh

'''
read read[addr=0x17,mask=0xff,val=0x7],read_his[addr=0xff,mask=0xff,val=0x1],read[addr=0xf0,mask=0xff,val=0x80]
'''


def judge(l):
    l1 = []
    l2 = []
    for item in l.split(','):
        x, y = item.split('=')
        l1.append(x)
        try:
            eval(y)
            l2.append(y)
        except:
            return False
    return l2


if __name__ == '__main__':
    keyword, str = input().split(' ')
    strList = str.split('],')
    strList[-1] = strList[-1].replace(']', '')
    flag = False
    for i in range(len(strList)):
        key, value = strList[i].split('[')
        if key == keyword:
            tmp = judge(value)
            if tmp:
                flag = True
                print(' '.join(tmp)+'\r\n',end='')
    if not flag:
        print("FAIL")

第三题,DFS或者DP都可以应该 70%

计算函数调用的最带栈开销
一开始显示有越界的问题,后来改到没有越界之类的问题,就单纯应该是部分测试样例的结果不同。

我是用的DP做的

dic{
1:2,3,
2:3,4,5
3:4
}

dp[i]=max([dp[val] for val in dic[i])

代码


'''
6 2 3 1 0 0
1 20 2 3
2 30 3 4 5
3 50 4
4 60
5 80
6 90
'''
res = dict()


def helper(idx, map_x, costs,pre,val):
    if val in pre:
        print("R")
        exit(0)
    else:
        pre.add(val)

    if idx in res:
        return res[idx]
    else:
        if idx in map_x:
            res[idx]=max(
                    [helper(val, map_x, costs,pre.copy(),val) for val in map_x[idx]]
                )
        else:
            res[idx]=0
        if idx >= len(costs):
            print('NA')
            exit(0)
        res[idx]+=costs[idx]
        return res[idx]


if __name__ == '__main__':
    line0 = input().split(' ')
    n = int(line0[0])
    costs = [0]
    map_x = dict()
    for i in range(n):
        l = [int(item) for item in input().split(' ')]
        costs.append(l[1])
        if l[2:]:
            map_x[l[0]] = l[2:]
    maxres=0

    for idx in range(1, n + 1):
        if idx not in res and idx in map_x:
            res[idx] = max(
                [helper(val, map_x, costs,set(),val) for val in map_x[idx]]
            ) + costs[idx]
        elif idx not in map_x:
            res[idx]=costs[idx]
        maxres=max(maxres,res[idx])
    print(maxres)