Deque这种数据结构结合了Stack和Queue的特点,元素可以从两边添加,也可以从两边移除。
依然通过List来构造该数据类型:
class Deque():
def __init__(self):
self.items = []
def add_front(self, item):
self.items.append(item)
def remove_front(self):
return self.items.pop()
def add_rear(self, item):
self.items.insert(0, item)
def remove_rear(self):
return self.items.pop(0)
def is_empty(self):
return self.items == []
def size(self):
return len(self.items)
rear可以看作是List的左边,front为List的右边。两边都能添加和删除元素。
Palindrome Checker为经典的回文问题,若字符串无论从左往右还是从右往左写,元素的顺序都一样,则为回文。如dad, eye,level等。
思路:将字符串总所有元素依次添加到Deque对象中,使用add_front或add_rear均可。然后每次检查首尾的字符是否相等(len > 2)。直至只剩下一个元素或0.
import Deque
def check_palindrome(target):
check_deque = Deque()
for item in target:
check_deque.add_front(item)
while check_deque.size() > 1:
rear_element = check_deque.remove_rear()
front_element = check_deque.remove_front()
if rear_element != front_element:
return False
return True
print(check_palindrome('roooor'))