赞
踩
题目:
考察内容:
滑动窗口+ eval()
思路:先把合法字符提取出来;再从合法字符提取出合法表达式;再获取最长字符串,并运算最后结果。
代码:
""" analyze: 如果没有,返回0 数学表达式包括,0-9;+-* 要求:最长(字符串);合法 一个数字不是算法表达式 操作符不能连续出现 input: str output: 最长合法简单数学表达式 eg: 1-2a1bc--3+*d-*3-6 [1-2, 1, --3+*, -*3-6] ['1-2', '1', '-3', '3-6'] 0-ac1*6-4*3+s -1*2abdd13456 way 先把合法字符提取处理 再处理合法表达式 re: 第一个可以为+/, 次数0/1 第二个必须为数字, 数字后面可以跟1-n个数字; 第三个为+/-/* 数字(1-n) """ input_str = input() legal_numbers = ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9"] legal_char = ["+", "-", "*"] legal = legal_char + legal_numbers res = list() left, right = 0, 0 for i in range(len(input_str)): if input_str[i] in legal: right = right + 1 if i == len(input_str)-1: res.append(input_str[left:right]) else: # print(left, right) res.append(input_str[left:right]) left = right + 1 right = left # print(res) def check_validity_no_regex(s): """ 检查表达式是否合法 :param s: :return: """ flag = False previous_char = None # 判断表达式是否包含[+,-,*] for char in legal_char: if char in s: flag = True # 判断表达式中是否出现连续符合 for char in s: if char in legal_char and previous_char in legal_char: flag = False return flag previous_char = char return flag temp = list() for i in res: # 剔除空字符串 if len(i) == 0: continue # 判断表达式是否合法 result = check_validity_no_regex(i) if result: # 防止表达式最后一个字符为运算字符 if i[-1] in legal_char: temp.append(i[:-1]) else: temp.append(i) # print(temp) if temp: expression = max(temp, key=len) print(expression, eval(expression)) else: print("kong")
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。