Deque的应用案例-回文检查

以下是关于 Deque(双端队列)的应用案例——回文检查 的详细说明和代码实现


回文检测:使用 Deque 检查字符串是否为回文

1. 回文的定义

  • 回文:一个字符串,从左到右读取和从右到左读取的结果相同。例如:
    • "radar"(雷达)
    • "toot"(嘟嘟)
    • "madam"(夫人)

2. 分析

  • 目标:设计一个程序,检测一个字符串是否为回文。
  • 思路
    1. 使用 Deque(双端队列) 来存储字符串的字符。
    2. 从左到右处理字符串,将每个字符添加到 Deque 的尾部。
    3. 利用 Deque 的特性:
      • 首部保存字符串的第一个字符。
      • 尾部保存字符串的最后一个字符。
    4. 比较首尾字符是否匹配:
      • 如果匹配,继续比较下一对字符。
      • 如果不匹配,字符串不是回文。
    5. 如果所有字符都匹配,或者最终 Deque 的大小为 1(对于奇数长度的字符串),则字符串是回文。

3. Deque 的操作

  • 添加字符:将字符添加到 Deque 的尾部(addRear)。
  • 删除字符
    • 从首部删除字符(removeFront)。
    • 从尾部删除字符(removeRear)。
  • 检查大小:使用 size() 方法检查 Deque 的大小。

4. 代码实现

from collections import deque

class Deque:
    def __init__(self):
        self.items = deque()

    def addFront(self, item):
        self.items.appendleft(item)

    def addRear(self, item):
        self.items.append(item)

    def removeFront(self):
        return self.items.popleft()

    def removeRear(self):
        return self.items.pop()

    def size(self):
        return len(self.items)

    def isEmpty(self):
        return len(self.items) == 0


def palchecker(aString):
    chardeque = Deque()

    # 将字符串的每个字符添加到 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"))  # False
print(palchecker("radar"))      # True
print(palchecker("toot"))       # True
print(palchecker("madam"))      # True
print(palchecker("hello"))      # False

5. 输出结果

  • 测试字符串 "lsdkjfskf"False(不是回文)
  • 测试字符串 "radar"True(回文)
  • 测试字符串 "toot"True(回文)
  • 测试字符串 "madam"True(回文)
  • 测试字符串 "hello"False(不是回文)

总结

  • Deque 的优势:利用其首尾操作的特性,可以高效地实现回文检测。
  • 时间复杂度:O(n),其中 n 是字符串的长度。每个字符只被添加和删除一次。
  • 应用场景:回文检测是字符串处理中常见的问题,Deque 提供了一种简洁且高效的解决方案。

希望这个案例能帮助你更好地理解 Deque 的应用!

posted @ 2021-07-13 15:15  杨梅杨梅  阅读(60)  评论(0)    收藏  举报