לדלג לתוכן

10.3 מחסנית ותור פתרון

מחסנית - סוגריים תקינים

class Stack:
    def __init__(self):
        self.items = []

    def push(self, item) -> None:
        self.items.append(item)

    def pop(self):
        return self.items.pop() if self.items else None

    def is_empty(self) -> bool:
        return len(self.items) == 0


def is_valid(s: str) -> bool:
    stack = Stack()
    pairs = {')': '(', ']': '[', '}': '{'}

    for char in s:
        if char in '([{':
            stack.push(char)
        elif char in ')]}':
            if stack.is_empty() or stack.pop() != pairs[char]:
                return False

    return stack.is_empty()


print(is_valid("()"))       # True
print(is_valid("()[]{}" ))  # True
print(is_valid("(]"))       # False
print(is_valid("([)]"))     # False
print(is_valid("{[]}"))     # True

תור - ניהול תור לקוחות

from queue import Queue


class CustomerQueue:
    def __init__(self):
        self._queue = Queue()

    def join(self, name: str) -> None:
        self._queue.put(name)
        print(f"{name} הצטרף לתור.")

    def call_next(self) -> str | None:
        if self._queue.empty():
            print("אין לקוחות ממתינים.")
            return None
        name = self._queue.get()
        print(f"קורא ל: {name}")
        return name

    def waiting_count(self) -> int:
        return self._queue.qsize()

    def print_queue(self) -> None:
        items = list(self._queue.queue)
        if not items:
            print("התור ריק.")
        else:
            print("ממתינים:", " -> ".join(items))


q = CustomerQueue()
q.join("Amit")
q.join("Dana")
q.join("Yossi")
q.print_queue()
print(f"ממתינים: {q.waiting_count()}")
q.call_next()
q.print_queue()

שאלות Leetcode

אין פתרון קוד כאן - פתרו בעצמכם ב-Leetcode. אם תקועים, קראו את הפתרון הרשמי ואז כתבו אותו מחדש בלי להסתכל.