美文网首页
用python实现Deque双端队列,解决回文词的判定

用python实现Deque双端队列,解决回文词的判定

作者: 金融测试民工 | 来源:发表于2020-03-25 21:40 被阅读0次

        双端队列Deque是一种有次序的数据集,跟队列相似,其两端可以称作“首”“尾”端。但deque中数据项既可以从队首加入,也可以从队尾加入;数据项也可以从两端移除。

        从某种意义上说,双端队列集成了栈和队列的能力。    但是双端队列并不具有LIFO和FIFO的特性。

    双端队列

        双端队列Deque定义的操作如下:

    Deque():创建一个空的双端队列,无参数,返回值是空队列。

    addFront(item):在队首添加入一个元素,参数是数据项,无返回值。

    addRear(item):在队尾添加入一个元素,参数是数据项,无返回值。

    removeFront():删除队首的元素,不需要参数,返回值是被删除的元素,队列本身有变化。

    removeRear():删除队尾的元素,不需要参数,返回值是被删除的元素,队列本身有变化。

    isEmpty():检测队列是否为空。无参数,返回布尔值。

    size():返回队列元素的个数。无参数,返回一个整数。

    用List实现Deque,List下标0作为deque的尾端,List下标-1作为deque的首端:

    class Deque:

        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)

        其中addFront和removeFront的操作复杂度为O(1),而addRear和removeRear的操作复杂度为O(n)。


        “回文词”判定

      “回文词”指正读和反渎都一样的词,如radar、madam、toot,而用双端队列很容易能解决“回文词”问题。

        首先将需要判定的词从队尾加入deque,再从两端同时移除字符判定是否相同,知道deque中剩下0个或1个字符

    回文词判断

    回文词判定的算法如下:

    代码

        但是其实python还有更简单的方法判定回文词,如下:

    s = input()

    a = reversed(list(s))

    if list(a) == list(s):

        print('是回文')

    else:

        print('不是回文')

    相关文章

      网友评论

          本文标题:用python实现Deque双端队列,解决回文词的判定

          本文链接:https://www.haomeiwen.com/subject/mycfuhtx.html