Unit 4 Session 1 Advanced (Click for link to problem statements)
Understand what the interviewer is asking for by using test cases and questions about the problem.
Q: What is the structure of the input?
"OPEN <app>"
or "CLOSE <app>"
.Q: What is the output?
True
if all app sessions are properly managed (every opened app has a corresponding close in the correct order), and False
otherwise.Q: What should the function return if the list is empty?
True
because there are no unmatched sessions.Q: Are there any constraints on the input?
"OPEN <app>"
and "CLOSE <app>"
actions.Plan the solution with appropriate visualizations and pseudocode.
General Idea: Use a stack to track the apps as they are opened. For each "CLOSE <app>"
action, check if the last opened app is the same; if not, return False
. At the end, if the stack is empty, return True
.
1) Initialize an empty list called `stack`.
2) Iterate over each `action` in `actions`:
a) If `action` starts with `"OPEN"`, extract the app name and push it onto the `stack`.
b) If `action` starts with `"CLOSE"`, extract the app name and check if the stack is not empty and the last opened app is the same:
- If not, return `False`.
- If yes, pop the app from the stack.
3) After processing all actions, return `True` if the stack is empty, otherwise return `False`.
**⚠️ Common Mistakes**
- Forgetting to check if the stack is empty before popping an app during a `"CLOSE"` action.
- Not handling the case where an app is closed before being opened.
def manage_screen_time_sessions(actions):
stack = []
for action in actions:
if action.startswith("OPEN"):
_, app = action.split(maxsplit=1)
stack.append(app)
elif action.startswith("CLOSE"):
_, app = action.split(maxsplit=1)
if not stack or stack[-1] != app:
return False
stack.pop()
return len(stack) == 0