3168. 候诊室中的最少椅子数
题目描述
给你一个字符串 s
,模拟每秒钟的事件 i
:
- 如果
s[i] == 'E'
,表示有一位顾客进入候诊室并占用一把椅子。 - 如果
s[i] == 'L'
,表示有一位顾客离开候诊室,从而释放一把椅子。
返回保证每位进入候诊室的顾客都能有椅子坐的 最少 椅子数,假设候诊室最初是 空的 。
示例 1:
输入:s = "EEEEEEE"
输出:7
解释:
每秒后都有一个顾客进入候诊室,没有人离开。因此,至少需要 7 把椅子。
示例 2:
输入:s = "ELELEEL"
输出:2
解释:
假设候诊室里有 2 把椅子。下表显示了每秒钟等候室的状态。
秒 | 事件 | 候诊室的人数 | 可用的椅子数 |
---|---|---|---|
0 | Enter | 1 | 1 |
1 | Leave | 0 | 2 |
2 | Enter | 1 | 1 |
3 | Leave | 0 | 2 |
4 | Enter | 1 | 1 |
5 | Enter | 2 | 0 |
6 | Leave | 1 | 1 |
示例 3:
输入:s = "ELEELEELLL"
输出:3
解释:
假设候诊室里有 3 把椅子。下表显示了每秒钟等候室的状态。
秒 | 事件 | 候诊室的人数 | 可用的椅子数 |
---|---|---|---|
0 | Enter | 1 | 2 |
1 | Leave | 0 | 3 |
2 | Enter | 1 | 2 |
3 | Enter | 2 | 1 |
4 | Leave | 1 | 2 |
5 | Enter | 2 | 1 |
6 | Enter | 3 | 0 |
7 | Leave | 2 | 1 |
8 | Leave | 1 | 2 |
9 | Leave | 0 | 3 |
提示:
1 <= s.length <= 50
s
仅由字母'E'
和'L'
组成。s
表示一个有效的进出序列。
解法
方法一:模拟
我们用变量 $\textit{cnt}$ 来记录当前需要的椅子数,用变量 $\textit{left}$ 来记录当前剩余的空椅子数。遍历字符串 $\textit{s}$,如果当前字符是 'E',那么如果有剩余的空椅子,就直接使用一个空椅子,否则需要增加一个椅子;如果当前字符是 'L',那么剩余的空椅子数加一。
遍历结束后,返回 $\textit{cnt}$ 即可。
时间复杂度 $O(n)$,其中 $n$ 为字符串 $\textit{s}$ 的长度。空间复杂度 $O(1)$。
1 2 3 4 5 6 7 8 9 10 11 12 |
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
|