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))  查看14道真题和解析
查看14道真题和解析
