zoukankan      html  css  js  c++  java
  • 七.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"))
  • 相关阅读:
    数据库基础知识复习-2013.09.24
    2013.9.24 答题
    使用单向循环链表实现约瑟夫问题
    C++关于数字逆序输出的两种思路,及字符串逆序输出
    题目要求:建立一个类Str,将一个正整数转换成相应的字符串,例如整数3456转换为字符串"3456".
    将博客搬至CSDN
    Android 下载模块分析(DownloadManager和DownloadProvider)
    linux shell基础语法
    Android过滤Logcat输出
    (Java 多线程系列)Java 线程池(Executor)
  • 原文地址:https://www.cnblogs.com/studybrother/p/11145348.html
Copyright © 2011-2022 走看看