双端队列应用之回文词检测
- 回文词就是给定一个字符串,从正序和逆序看是对称的。如“上海自来水来自海上”,“山东落花生花落东山”,“asdfdsa”,“123454321”等等。
- 因为是对称的,一种方法就是判断正序和逆序遍历结果是否一样;另一种方法就是从两端同时读取,判断是否一样,一样则继续深入读取,继续判断,直到遍历完(偶数个字符),或者还剩下中间的那个字符。
本文采用第二种方法,应用双端队列的特性进行实现。首先将字符串读入队列,然后双向读取并判断是否相同。(双向队列的实现参考上一篇)
def palchecker(aString):
deque = Deque()
# 回文词入队
for i in aString:
deque.addFront(i)
state = True
# 双向读取并比较
while deque.size() > 1 and state:
df = deque.removeFront()
dr = deque.removeRear()
# print(df,dr)
if df != dr:
state = False
return state