七.Deque的应用案例-回文检查

- 回文检测:设计程序,检测一个字符串是否为回文。

- 回文:回文是一个字符串,读取首尾相同的字符,例如,radar toot madam

- 分析:该问题的解决方案将使用 deque 来存储字符串的字符。我们从左到右处理字符串,并将每个字符添加到 deque 的尾部。在这一点上,deque 像一个普通的队列。然而,我们现在可以利用 deque 的双重功能。 deque 的首部保存字符串的第一个字符,deque 的尾部保存最后一个字符。我们可以直接删除并比较首尾字符,只有当它们匹配时才继续。如果可以持续匹配首尾字符,我们最终要么用完字符,要么留出大小为 1 的deque,取决于原始字符串的长度是偶数还是奇数。在任一情况下,字符串都是回文。

 

 

class Dequeue():
    def __init__(self):
        self.items = []
    def addFont(self,item):
        self.items.append(item)
    def addRear(self,item):
        self.items.insert(0,item)
    def isEmpty(self):
        return self.items == []
    def removeFont(self):
        if self.isEmpty():
            return None
        else:
            return self.items.pop(0)
    
    def removeRear(self):
        if self.isEmpty():
            return None
        else:
            return self.items.pop()
    def size(self):
        return len(self.items)

 

方法1

def isHuiWei(s):
    #将字符添加到双端队列中
    q = Dequeue()
    #表示字符串是否为回文
    for ch in s:
        q.addFont(ch)
        
    while q.size() > 1:
        first = q.removeFont()
        last = q.removeRear()
        if first != last:
            return False
    return True 
print( isHuiWei('aba'))
True

 

方法2:

def palchecker(aString):
    chardeque = Deque()

    for ch in aString:
        chardeque.addRear(ch)

    stillEqual = True

    while chardeque.size() > 1 and stillEqual:
        first = chardeque.removeFront()
        last = chardeque.removeRear()
        if first != last:
            stillEqual = False

    return stillEqual

print(palchecker("lsdkjfskf"))
print(palchecker("radar"))

 

posted @ 2019-07-07 10:16  studybrother  阅读(314)  评论(0编辑  收藏  举报