自留用来复习期末考的!如有错误也欢迎批评指正!
首先复习栈和队列的相关算法题,都不算太难。
1.利用两个栈实现回文检测器:不限制回文的大小写,不限制回文中添加空格。(下面这个办法是最简单的,也是最好理解的)
from pythonds.basic import Stack
def palchecker(astring):
s1=Stack()
s2=Stack()
astring=astring.lower()
astring=astring.replace(' ','')
for j in astring:
s1.push(j)
for j in astring:
s2.push(s1.pop())
for j in astring:
s1.push(j)
for i in range(len(astring)):
if s1.pop()!=s2.pop():
return False
return True #注意return的位置要在循环结束之后
2.利用一个栈和一个队列实现回文检测器,回文输入的要求同题1。
from pythonds.basic import Stack, Queue
def palchecker(aString):
aString = aString.lower()
aString = aString.replace(' ', '')
s = Stack()
q = Queue()
length = len(aString)
mid = length // 2
for ch in aString:
q.enqueue(ch)
for i in range(mid):
s.push(q.dequeue())
if length % 2 == 1:
q.dequeue()
for j in range(mid):
if s.pop() != q.dequeue():
return False
return True
3.用栈来检查式子中的括号是否匹配
from pythonds.basic import Stack
def parChecker(symbolString):
s = Stack()
balanced = True
index = 0 #存游标
match = True
while index < len(symbolString) and balanced:
symbol = symbolString[index] #存游标对应的值
if symbol in "([{":
s.push(symbol)
elif symbol in ")]}":
if s.isEmpty():
balanced = False
else:
top = s.pop()
if top=='(' and symbol == ')'