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