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

你可能感兴趣的:(python,数据结构,算法)