9.16深信服笔试Python代码
42分填空,58分编程
填空题基本都是智商题和算法基础,没啥大的难度
四道编程题也不难,基本没用到什么算法,除了第一题LRU看错题意了在50%耗了半天,其他题基本都是1A
没给数据范围,默认全部能暴力,没动什么脑子就过了
九点放代码
UPD:
第一题
模拟LRU
一直处于只知道原理但没做过的状态。。。开始是以为搞个双端队列先进先出就完事了,结果只过了50%。后来发现还有次数要求,然后搞了个关键字排序,发现也不对。出来之后发现有力扣原题,读了下题解发现自己题意理解错了(不写力扣导致的
30%代码(50%的被覆盖了)
def solve1():
n, m = map(int, input().split())
q = []
for i in range(m):
s = input().split()
op = s[0]
# print(*q)
if op == "s":
k, v = int(s[1]), int(s[2])
if len(q) < n:
q.append([1, k, v])
else:
q.sort(reverse=True)
q.pop()
q.append([1, k, v])
else:
temp = int(s[1])
for j in q:
if j[1] == temp:
print(j[2])
t = j
q.remove(j)
q.append([t[0] + 1, t[1], t[2]])
break
else:
print(-1)
# pass
第二题
模拟正则匹配中的*和.,a串是目标串,b串是模式串,匹配成功输出1,失败则输出0,用内置库得0分
两个指针照着题意模拟一下就行了,没什么好说的
def solve2():
a = input()
b = input()
n = len(a)
ok = 1
last = ""
i, j = 0, 0
while i < n:
if a[i] == b[j]:
i += 1
j += 1
continue
else:
if b[j] == ".":
i += 1
j += 1
elif b[j] == "*":
while i < n and b[j - 1] == a[i]:
i += 1
j += 1
else:
ok = 0
print(ok)
第三题
给定一串数字,求此数字循环往右的过程中的最大值,例如1324循环的结果最大是4132
C语言作业难度
def solve3():
n = input()
mx = -1
for i in n:
mx = max(mx, int(i))
pos = []
for i in range(len(n)):
if int(n[i]) == mx:
pos.append(i)
ans = []
for i in pos:
ans.append(int(n[i:] + n[:i]))
print(max(ans))
第四题
给定字符串A和字符串B,求在字符串A中能找到包含字符串B的字串的最小长度(包含字符串B:即该字串含有字符串B的全部字母,不论顺序)
双指针+暴力搞一搞就行了,没给数据范围一律默认可以暴力
听说是典题,但没写过,代码有点丑,但能过的代码就是好代码((
def solve4():
temp = input().split(",")
a = temp[0][1:-1]
b = temp[1][1:-1]
n = len(a)
d = [0] * 29
for i in b:
d[ord(i) - ord('A')] += 1
ans = []
now = [0] * 29
l, r = 0, 0
def check():
ok = 1
for i in range(28):
if now[i] < d[i]:
ok = 0
break
return ok
if b.find(a[l]) != -1:
now[ord(a[l]) - ord('A')] += 1
while r < n:
ok = 0
for i in range(28):
if now[i] < d[i]:
ok = 1
break
if ok:
r += 1
if r < n and b.find(a[r]) != -1:
now[ord(a[r]) - ord('A')] += 1
continue
ans.append(a[l:r + 1])
while check() and l < n:
# print(l)
if b.find(a[l]) != -1:
now[ord(a[l]) - ord('A')] -= 1
ans.append(a[l:r + 1])
l += 1
# print(ans)
mi = 1 << 31
for i in ans:
mi = min(mi, len(i))
for i in ans:
if len(i) == mi:
print(f'"{i}"')
return
print('""')
#我的求职思考#