双端队列Deque
deque中,数据项可以分别从首、尾加入或者从两端移除;
使用list来实现,列表下标0作为deque的尾端,下标-1为deque的首端;
class Deque():
def __init__(self):
self.items = []
def addFront(self,item):
self.items.append(item)
def addRear(self,item):
self.items.insert(0,item)
def removeFront(self):
return self.items.pop()
def removeRear(self):
return self.items.pop(0)
def isEmpty(self):
return self.items == []
def size(self):
return len(self.items)
应用:
回文词判断:正读反读都一样的词语
用双端队列很容易实现,将词按顺序从尾端存入双端队列,然后同时从首尾两端删除字符并比较是否相同,直至队列中只剩下一个字符或者0个字符;
from Deque import Deque
def palchecker(aString):
palDeque = Deque()
for i in aString:
palDeque.addRear(i)
stillEqual = True
while palDeque.size() > 1 and stillEqual:
right = palDeque.removeRear()
left = palDeque.removeFront()
if right != left:
stillEqual = False
return stillEqual
print(palchecker('aba'))