我今天早上早些时候在这个问题上的面试失败了,并且无法弄清楚为什么。谁能帮我吗?
由操作数和二元运算符组成的表达式可以用逆波兰表示法 (RPN) 编写,方法是在运算符后面写两个操作数。例如,3 + (4 * 5) 可以写成“3 4 5 * +”。
你得到一个由 x 和 * 组成的字符串。x 表示操作数,* 表示二元运算符。很容易看出,并非所有此类字符串都代表有效的 RPN 表达式。例如,“x*x”不是有效的 RPN 表达式,而“xx*”和“xxx**”是有效的表达式。将给定字符串转换为有效 RPN 表达式所需的最少插入、删除和替换操作数是多少?
5
x
xx*
xxx**
*xx
xx*xx**
输出
0
0
0
2
0
到目前为止的代码:
import fileinput
def solution (rpn):
xs = 0
numReplaces = 0
numDeletes = 0
numInserts = 0
for i in xrange(len(rpn)):
if rpn[i] == 'x':
xs += 1
elif rpn[i] == '*':
if xs > 1:
xs -= 1
elif xs == 1:
if numDeletes > 0:
numReplaces += 1
numDeletes -= 1
else:
if i == len(rpn)-1:
numInserts += 1
else:
numDeletes += 1
else:
if numDeletes > 1:
numDeletes -= 2
numReplaces += 2
else:
numDeletes += 1
while xs > 1:
if xs > 2:
numReplaces += 1
xs -= 2
if xs == 2:
numInserts += 1
xs -= 1
return numReplaces + numDeletes + numInserts
first = True
for line in fileinput.input():
if first:
numCases = int(line)
first = False
else:
print solution(line)