> 文档中心 > 经典算法题:回文字符串的python实现

经典算法题:回文字符串的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

31戒烟网