什么是回文串?回文串是正读和反读都一样的字符串,例如“123321”,“45654”。
思路分析:如何判定一个字符串是回文串,可以根据回文串正读反读都一致的特性来判断,这一特性我们可以联想到双端队列这种数据结构。双端队列可以双向进出,我们只需要把字符串放入队列,每次从两端各出队一次,判断出队元素是否一致即可判断此字符串是否是回文串。
下面我们一起看一下具体代码:
双端队列代码:
class Dequeue:
"""双端队列(前出后进)"""
def __init__(self):
self.__items = []
def isEmpty(self):
"""检查双端队列是否为空"""
return 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 size(self):
"""返回双端队列中元素个数"""
return len(self.__items)
判断回文串代码:
import dequeue
def palChecker(symbolString):
"""判断是否为回文串"""
queue = dequeue.Dequeue() # 创建双端队列
for ch in symbolString:
queue.addRear(ch) # 字符串进队
while queue.size() > 1:
# 前后出队元素一致则为回文串
rear = queue.removeRear()
front = queue.removeFront()
if front != rear:
return False
else:
return True