我正在研究一个问题,给定一个字符串,任何给定数量的'a'必须跟随'b'的两倍。这必须是递归的。例如:
abb("aabbbbabb")
>>>True
abb("aabbabbb")
>>>False
我的直觉是制作一个堆叠并将字母'a'推到堆栈中,每次看到两个'b'时,从堆栈中弹出'a'。相反,我决定更新'b'作为变量的位置和数量。假设第一个字母始终为'a',则应显示的'b'的数量由i + 2表示。
到目前为止,我有这个小问题:
def aabb(string, postion=None, i=None):
if position is None:
position = 0
if i is None:
i = 0
if position != len(string):
if string[position] == "a":
i = i +2
position = position +1
return aabb(string[position], position, i)
if string[position] =="b" and i >0:
i = i - 1
position = position +1
return aabb(string[position], position, i)
if string[position] == "a" and i != 0:
print "False"
if string[position] == "b" and i == 0:
print "False"
else:
print "True"
我遇到的问题如下:
if position is None:
UnboundLocalError: local variable 'position' referenced before assignment
如果它是可选参数,我不确定我是如何引用它的?否则,我只是以完全错误的方式解决这个问题?感谢。
答案 0 :(得分:0)
这是伪代码版本:
def abb(s):
if s is empty:
return True # base case
else:
get number of leading "a"s # itertools.takewhile
if number is 0:
return False
else:
get twice that number of characters # itertools.islice
if they are all bs
return abb(remainder of string)