7.14字节后端People面试编程题分享
有点紧张,面试时思路不清晰,好多东西都忘了。
这里来分享一下面试的编程题(紧张了,思路不清晰,现场撸代码翻车了,刚刚重新做了一下来分享哈)
题目描述:输入一个字符串,其包含逻辑运算符和布尔变量(用t和f分别表示True和False),编写程序计算字符串运算结果
例如:
输入"!(&(t,t,f,|(t,f)))",
例如:
输入"!(&(t,t,f,|(t,f)))",
输出应为 "t"。
代码解答如下:(用栈来做,最开始我思路是对的,面试官让我讲下思路,然后我做了一下遇到了困难,开始怀疑自己思路不对,因为面试官没给任何反馈,我以为我想错了,就想去改用其他方法来做,后来发现还是用栈做最方便)
if __name__ == "__main__":
def oper(ll,op):
d = {'t':0,'f':0}
for i in ll:
if i in d:
d[i] += 1
if op == '&':
if d['f']>0: return 'f'
else: return 't'
elif op == '|':
if d['t']>0: return 't'
else: return 'f'
else:
if d['t'] == 1:
return 'f'
else:
return 't'
def res(s):
stack = []
tmp = []
for char in s:
if char == ')':
t = stack.pop()
while t!='(':
tmp.append(t)
t = stack.pop()
tmp.append(t)
operator = stack.pop()
n = oper(tmp, operator)
if not stack: return n
stack.append(n)
else:
stack.append(char)
# 测试用例
s1 = "!(&(t,t,f,|(t,f)))"
s2 = "&(t,t,|(f,f,f),t,&(t,t))"
# 输出
print(res(s1),res(s2)) 
查看13道真题和解析