经典算法题:回文字符串的python实现
1.什么是回文字
所谓的回文字,就是指从左往右读和从右往左读没有区别,例如”abcba"就是回文字。
2.判断思路
回文字这种形式让我们想到它的特点是左右对称,那么我们只需要判断其对称性即可。我们可以尝试者把该字符串最左边和最右边的拿出来进行对比,判断是否相等;若相等,则判断左边第二个和右边倒数第二个是否相等;依次类推。但是判断次数肯定要有限制,如果字符串中元素个数是偶数,最后字符串长度为0,如果元素个数是奇数,那么最后长度为1.因此,我们的限制条件是,字符串的长度应始终大于1.
接着我们就需要考虑用什么数据结构来判断,这种数据结构要求我们可以在两端取出元素,因此,我们想到使用双向队列。我们可以把元素输入双向队列中,然后取出。
3.代码演示
class Deque: """定义双向队列""" def __init__(self): self.items = [] """判断队列是否为空""" def isEmpty(self): return self.items == [] """在队列首端插入元素""" def addFront(self,item): self.items.insert(0,item) """在队列尾端插入元素""" def addRear(self, item): self.items.append(item) """在队列首端删除元素""" def deFront(self): return self.items.pop(0) """在队列尾端删除元素""" def deRear(self): return self.items.pop() """返回队列的长度""" def size(self): return len(self.items)def checker(astring): #第一步,实例化类 strdeque = Deque() #第二步,把回文词中的元素加入到双端队列中 for astr in astring: strdeque.addRear(astr) check_point = True#这里设立一个检测点,检测两端字符是否相等。 #第三步,依次检测两端字符 while strdeque.size()>1 and check_point: left_str = strdeque.deFront()#从首端移出元素 right_str = strdeque.deRear()#从尾端移出元素 #如果不相等,将检测点设为False,停止循环 if left_str != right_str: check_point = False return check_point