栈和队列

2020-02-15  本文已影响0人  sparkshen
  1. 判断括号是否匹配:字符串中只含括号,如][],[{}], ()[]{[]}。
    当遇到一个字符的时候,由两条规则判断接下去做什么(跟背法律条文一样):
    a. 字符不是闭合括号,则进栈
    b. 栈为空或者 字符是不匹配的左括号,就说明不合法的字符串
is_valid(self, s):
    stack = []
    param_map = {')':'(', ']':'[', '}':'{'}
    for c in s:
        if c not in param_map:
            stack.append(c)
        elif not stack or param_map[c] != stack.pop():
            return False
    return not stack
  1. 使用栈/队列,实现队列/栈 - 来回倒腾。push方法都一样,主要是pop和top。两个循环,第一个循环,一个个元素倒入第二个数组,但要留下最后一个元素,用作返回,所以是 length>1。然后穿插一个语句,取出最后一个元素,用作返回。接下来,第二个循环,再把所有元素倒腾回去,准备下一次pop/top
#用栈表示队列,两个循环,中间穿插有个取数
class TestStack(object):
    def __init__(self):
        self.stack = []

    def push(self, u):
        self.stack.append(u)

    def pop(self):
        if self.is_empty:
            return None
        return self.stack.pop()

    @property
    def length(self):
        return len(self.stack)

    @property
    def is_empty(self):
        return self.length == 0

class TestQueue:
    def __init__(self):
        self.stack1 = TestStack()
        self.statck2 = TestStack()

    def push(self, u):
        self.stack1.push(u)

    def pop(self):
        while self.stack1.length > 1:
            self.statck2.push(self.stack1.pop())

        result = self.stack1.pop()

        while not self.statck2.is_empty:
            self.stack1.push(self.statck2.pop())

        return result
上一篇 下一篇

猜你喜欢

热点阅读